回聲伺服器和客戶端的實現

2021-07-03 06:25:28 字數 2536 閱讀 3788

客戶端

#include

#include

#include

#include

#include

#include

#define buf_size 1024

#define rlt_size 4

#define opsz 4

void error_handling(char *message);

int main(int argc, char * argv)

sock = socket(pf_inet, sock_stream, 0);  //初始化套接字 

if(sock == -1)

memset(&serv_adr, 0, sizeof(serv_adr));  //初始化為0 

serv_adr.sin_family = af_inet;   //使用ipv4 

serv_adr.sin_addr.s_addr = inet_addr(argv[1]);  //第乙個位元組為ip位址 

serv_adr.sin_port = htons(atoi(argv[2]));  //第二個為埠號 

if(connect(sock, (struct sockaddr *)&serv_adr, sizeof(serv_adr)) == -1)   //鏈結套接字和位址 

error_handling( "connect() error! " );

else

puts("connected.....");

fputs("operand count: ", stdout);

scanf("%d", &opnd_cnt);

opmsg[0] = (char)opnd_cnt; //將乙個 個數 按照位元組模式輸入到緩衝區 

for(i = 0; i < opnd_cnt; i++)

fgetc(stdin);

fputs("operator:", stdout);

scanf("%c", &opmsg[opnd_cnt*opsz+1]);

write(sock, opmsg, opnd_cnt*opsz+2);   //傳送到伺服器 

read(sock, &result,rlt_size);  //得到結果 

printf("result %d\n",result);

close(sock);

return 0;

}void error_handling(char *message)

serv_sock=socket(af_inet,sock_stream,0);  //初始化套接字 

memset(&serv_adr, 0, sizeof(serv_adr));   //將結構體清零 

serv_adr.sin_family = af_inet;            //設定協議族 使用ipv4 

serv_adr.sin_addr.s_addr = htonl(inaddr_any);  //接受任意位址 

serv_adr.sin_port = htons(atoi(argv[1]));   //第二個引數為埠號 

if(bind(serv_sock, (struct sockaddr*)&serv_adr, sizeof(serv_adr))== -1)  //繫結位址 

if(listen(serv_sock, 5) == -1)    //監聽 隊列為5 

error_handling("listen() error!"); 

clnt_adr_sz = sizeof(clnt_adr);   

for(i = 0; i < 5; i++)

result = calculate(opnd_cnt, (int*)opinfo, opinfo[recv_len-1]); // 第乙個為 數字個數  陣列 符號 

printf("result = %d\n", result);   //輸出結果 

write(clnt_sock, (char*)&result, sizeof(result));   //向客戶端寫結果 

close(clnt_sock);  //關閉鏈結的套接字 

} close(serv_sock);  //關閉鏈結客戶端的套接字 

return 0;

}int calculate(int opnum, int opnds, char op)

break;

case '-':

for(i = 1; i < opnum; i++)

result-= opnds[i];

break;

case'*':

for(i = 1; i < opnum; i++)

result*=opnds[i];

break;

//case'/':

//for(i = 1; i < opnum; i++)

//result/=opnum[i];

//break;

}return result;

}void error_handling(char *message)

網路程式設計 實現迭代回聲伺服器端 客戶端

1.直接跳轉到linux端 2.直接跳轉到windows端 掌握tcp套接字工作原理。在linux和windows作業系統上編寫迭代伺服器端 客戶端。讓伺服器端以迭代方式執行,為多個客戶端提供回聲服務。1 在linux作業系統上編寫程式,實現迭代回聲伺服器端 客戶端 1 改進實驗一中實現的hello...

C 回聲伺服器 2 修復客戶端問題

c 回聲伺服器 1 簡單版本中的問題出在客戶端。客戶端通過write函式一次性傳送資料,過一段時間再呼叫一次read函式,期望接收傳輸的資料。問題在於這段時間到底是多久?理想的客戶端應在接收到資料時立即讀取資料。客戶端傳送資料時,可以知道資料的大小 長度 客戶端接收資料的時候,可以知道接收到資料的大...

C 回聲伺服器 2 修復客戶端問題

c 回聲伺服器 1 簡單版本中的問題出在客戶端。客戶端通過write函式一次性傳送資料,過一段時間再呼叫一次read函式,期望接收傳輸的資料。問題在於這段時間到底是多久?理想的客戶端應在接收到資料時立即讀取資料。客戶端傳送資料時,可以知道資料的大小 長度 客戶端接收資料的時候,可以知道接收到資料的大...