日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

实验三 实时系统

發布時間:2025/3/17 windows 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实验三 实时系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實驗內容:

編寫程序,實現Linux下的socket編程

代碼:

#include <stdio.h>

?#include <sys/socket.h>

?#include <sys/types.h>

?#include <stdlib.h>

?#include <netinet/in.h>

?#include <errno.h>

?#include <string.h>

?#include <arpa/inet.h>

?#include <unistd.h>

?#define MAXLINE 1024

?int main(int argc,char **argv)

?{

?char *servInetAddr = "127.0.0.1";

?int socketfd;

?struct sockaddr_in sockaddr;

?char recvline[MAXLINE], sendline[MAXLINE];

?int n;

?printf(“inpute the message\n");

?if(argc != 2)

?{

?printf("client connect success \n");

?exit(0);

?}

?

?socketfd = socket(AF_INET,SOCK_STREAM,0);

?memset(&sockaddr,0,sizeof(sockaddr));

?sockaddr.sin_family = AF_INET;

?sockaddr.sin_port = htons(10004);

?inet_pton(AF_INET,servInetAddr,&sockaddr.sin_addr)

?if((connect(socketfd,(struct sockaddr*)&sockaddr,sizeof(sockaddr))) < 0 )

?{

?printf("connect error %s errno: %d\n",strerror(errno),errno);

?exit(0);

?}

?

?printf("send message to server\n");

?

?fgets(sendline,1024,stdin);

?

?if((send(socketfd,sendline,strlen(sendline),0)) < 0)

?{

?printf("send mes error: %s errno : %d",strerror(errno),errno);

?exit(0);

?}

?

?close(socketfd);

?printf("exit\n");

?exit(0);

?}

?

?

#include <stdio.h>

?#include <sys/socket.h>

?#include <sys/types.h>

?#include <string.h>

?#include <netinet/in.h>

?#include <stdlib.h>

?#include <errno.h>

?#include <unistd.h>

?#include <arpa/inet.h>

?

?#define MAXLINE 1024

?int main(int argc,char **argv)

?{

?int listenfd,connfd;

?struct sockaddr_in sockaddr;

?char buff[MAXLINE];

?int n;

?

?memset(&sockaddr,0,sizeof(sockaddr));

?

?sockaddr.sin_family = AF_INET;

?sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);

?sockaddr.sin_port = htons(10004);

?

?listenfd = socket(AF_INET,SOCK_STREAM,0);

?

?bind(listenfd,(struct sockaddr *) &sockaddr,sizeof(sockaddr));

?

?listen(listenfd,1024);

?for(;;)

?{

?if((connfd = accept(listenfd,(struct sockaddr*)NULL,NULL))==-1)

?{

?printf("accpet socket error: %s errno :%d\n",strerror(errno),errno);

?continue;

?}

?

?n = recv(connfd,buff,MAXLINE,0);

?buff[n] = '\0';

?printf("recv msg from client:%s",buff);

?close(connfd);

?}

?close(listenfd);

?}

?

實現截圖:

  二 多線程實現

    實現代碼:

#include <netinet/in.h>??? // for sockaddr_in

#include <sys/types.h>??? // for socket

#include <sys/socket.h>??? // for socket

#include <stdio.h>??????? // for printf

#include <stdlib.h>??????? // for exit

#include <string.h>??????? // for bzero

#include <unistd.h>

/*

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

*/

#define HELLO_WORLD_SERVER_PORT??? 6666

#define LENGTH_OF_LISTEN_QUEUE 20

#define BUFFER_SIZE 1024

#define FILE_NAME_MAX_SIZE 512

#define FILE_WORDS_NUMBER 32

int wc_func(char *file_name);

int main(int argc, char **argv)

{

??? //設置一個socket地址結構server_addr,代表服務器internet地址, 端口

??? struct sockaddr_in server_addr;

??? bzero(&server_addr,sizeof(server_addr)); //把一段內存區的內容全部設置為0

??? server_addr.sin_family = AF_INET;

??? server_addr.sin_addr.s_addr = htons(INADDR_ANY);

??? server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);

?

??? //創建用于internet的流協議(TCP)socket,用server_socket代表服務器socket

??? int server_socket = socket(PF_INET,SOCK_STREAM,0);

??? if( server_socket < 0)

??? {

??????? printf("Create Socket Failed!");

??????? exit(1);

??? }

???

??? //把socket和socket地址結構聯系起來

??? if( bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr)))

??? {

??????? printf("Server Bind Port : %d Failed!", HELLO_WORLD_SERVER_PORT);

??????? exit(1);

??? }

???

??? //server_socket用于監聽

??? if ( listen(server_socket, LENGTH_OF_LISTEN_QUEUE) )

??? {

??????? printf("Server Listen Failed!");

??????? exit(1);

??? }

??? while (1) //服務器端要一直運行

??? {

??????? //定義客戶端的socket地址結構client_addr

??????? struct sockaddr_in client_addr;

??????? socklen_t length = sizeof(client_addr);

?

??????? //接受一個到server_socket代表的socket的一個連接

??????? //如果沒有連接請求,就等待到有連接請求--這是accept函數的特性

??????? //accept函數返回一個新的socket,這個socket(new_server_socket)用于同連接到的客戶的通信

??????? //new_server_socket代表了服務器和客戶端之間的一個通信通道

??????? //accept函數把連接到的客戶端信息填寫到客戶端的socket地址結構client_addr中

??????? int new_server_socket = accept(server_socket,(struct sockaddr*)&client_addr,&length);

??????? if ( new_server_socket < 0)

??????? {

??????????? printf("Server Accept Failed!\n");

??????????? break;

??????? }

???????

??? char file_name[FILE_NAME_MAX_SIZE+1];

??? bzero(file_name, FILE_NAME_MAX_SIZE+1);

??? char buffer[BUFFER_SIZE];

??? bzero(buffer,BUFFER_SIZE);

??? recv(new_server_socket,file_name,BUFFER_SIZE,0);

???

???

??? FILE * fp = fopen(file_name,"w");

??? if(NULL == fp )

??? {

??????? printf("File:\t%s Can Not Open To Write\n", file_name);

??????? exit(1);

??? }

???

??? //從客戶端接收數據到buffer中

??? bzero(buffer,BUFFER_SIZE);

??? int len = 0;

??? while( len = recv(new_server_socket,buffer,BUFFER_SIZE,0))

??? {

????? ??if(len < 0)

??????? {

??????????? printf("Recieve Data From Client %s Failed!\n", argv[1]);

??????????? break;

??????? }

?

??????? int write_length = fwrite(buffer,sizeof(char),len,fp);

??????? if (write_length<len)

??????? {

??????????? printf("File:\t%s Write Failed\n", file_name);

??????????? break;

??????? }

??????? bzero(buffer,BUFFER_SIZE);???

??? }

??? printf("File:\t%s Transfer Finished!\n",file_name);

???

??? fclose(fp);

???

??? //關閉與客戶端的連接

??? close(new_server_socket);

??? }

??? //關閉監聽用的socket

??? close(server_socket);

??? return 0;

}

?

#include <netinet/in.h>??? // for sockaddr_in

#include <sys/types.h>??? // for socket

#include <sys/socket.h>??? // for socket

#include <stdio.h>??????? // for printf

#include <stdlib.h>??????? // for exit

#include <string.h>??????? // for bzero

#include <unistd.h>

/*

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

*/

?

#define HELLO_WORLD_SERVER_PORT??? 6666

#define BUFFER_SIZE 1024

#define FILE_NAME_MAX_SIZE 512

#define FILE_WORDS_NUMBER 32

int main(int argc, char **argv)

{

??? if (argc != 2)

??? {

??????? printf("Usage: ./%s ServerIPAddress\n",argv[0]);

??????? exit(1);

??? }

?

??? //設置一個socket地址結構client_addr,代表客戶機internet地址, 端口

??? struct sockaddr_in client_addr;

??? bzero(&client_addr,sizeof(client_addr)); //把一段內存區的內容全部設置為0

??? client_addr.sin_family = AF_INET;??? //internet協議族

??? client_addr.sin_addr.s_addr = htons(INADDR_ANY);//INADDR_ANY表示自動獲取本機地址

??? client_addr.sin_port = htons(0);??? //0表示讓系統自動分配一個空閑端口

??? //創建用于internet的流協議(TCP)socket,用client_socket代表客戶機socket

??? int client_socket = socket(AF_INET,SOCK_STREAM,0);

??? if( client_socket < 0)

??? {

??????? printf("Create Socket Failed!\n");

??????? exit(1);

??? }

??? //把客戶機的socket和客戶機的socket地址結構聯系起來

??? if( bind(client_socket,(struct sockaddr*)&client_addr,sizeof(client_addr)))

??? {

??????? printf("Client Bind Port Failed!\n");

??????? exit(1);

??? }

?

??? //設置一個socket地址結構server_addr,代表服務器的internet地址, 端口

??? struct sockaddr_in server_addr;

??? bzero(&server_addr,sizeof(server_addr));

??? server_addr.sin_family = AF_INET;

??? if(inet_aton(argv[1],&server_addr.sin_addr) == 0) //服務器的IP地址來自程序的參數

??? {

??????? printf("Server IP Address Error!\n");

??????? exit(1);

??? }

??? server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);

??? socklen_t server_addr_length = sizeof(server_addr);

??? //向服務器發起連接,連接成功后client_socket代表了客戶機和服務器的一個socket連接

??? if(connect(client_socket,(struct sockaddr*)&server_addr, server_addr_length) < 0)

??? {

??????? printf("Can Not Connect To %s!\n",argv[1]);

??????? exit(1);

??? }

?

??? char file_name[FILE_NAME_MAX_SIZE+1];

??? bzero(file_name, FILE_NAME_MAX_SIZE+1);

??? printf("Please Input File Name On Server:\t");

??? scanf("%s", file_name);

???

??? char buffer[BUFFER_SIZE];

??? bzero(buffer,BUFFER_SIZE);

??? strncpy(buffer, file_name, strlen(file_name)>BUFFER_SIZE?BUFFER_SIZE:strlen(file_name));

??? //向服務器發送buffer中的數據

??? send(client_socket,buffer,BUFFER_SIZE,0);

?

??? FILE * fp = fopen(file_name,"r");

??? if(NULL == fp )

??? {

??????? printf("File:\t%s Not Found\n", file_name);

??????? exit(1);

??? }

??? else

??? {

????? ??????bzero(buffer, BUFFER_SIZE);

??????????? int file_block_length = 0;

??????????? while( (file_block_length = fread(buffer,sizeof(char),BUFFER_SIZE, fp))>0)

??????????? {

??????????????? //printf("file_block_length = %d\n",file_block_length);

??????????????? //發送buffer中的字符串到服務器

??????????????? if(send(client_socket,buffer,file_block_length,0)<0)

??????????????? {

??????????????????? printf("Send File:\t%s Failed\n", file_name);

??????????????????? break;

??????????????? }

??????????????? bzero(buffer, BUFFER_SIZE);

??????????? }

??? }

???

??? printf("Send File:\t %s To Server[%s] Finished\n",file_name, argv[1]);

??????

??? printf("The File has %d words.\n", wc_func(file_name));

??? fclose(fp);

?

??? //關閉socket

??? close(client_socket);

??? return 0;

}

int wc_func(char *file_name)

{

?????? int t;

?????? int w = 0;

?????? int state = 0;

?????? FILE *in;

?????? if((in = fopen(file_name,"r"))==NULL)

?????? {

????????????? printf("wc %s:no this file or dir\n",file_name);

????????????? return;

?????? }

?????? while((t=fgetc(in))!=EOF)

?????? {

?????????????

????????????? if(t=='\n'||t==' '||t=='\r') {

??????????? ????????????? state = 0;

??????????? ????????????? continue;

??????? ?????? } else {

??????????? ????????????? if(state == 0) {

??????????????? ?????? state = 1;

??????????????? ?????? w++;

?????????? ???????? }

??????????? ????????????? continue;

??????? ?????? }

?????? }

?????? return w;

}

?

運行結果:

?

轉載于:https://www.cnblogs.com/x20165335/p/9977624.html

總結

以上是生活随笔為你收集整理的实验三 实时系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。