Linux下網路程式設計實驗

2021-06-23 00:52:32 字數 4842 閱讀 5901

(1)tcp程式設計

伺服器端tcp_server.c

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#define portnumber 3333

int main(int argc, char *argv)  

/* 伺服器端填充 sockaddr結構 */

bzero(&server_addr,sizeof(struct sockaddr_in)); // 初始化,置0

server_addr.sin_family=af_inet;                 // internet

server_addr.sin_addr.s_addr=htonl(inaddr_any);  // (將本機器上的long資料轉化為網路上的long資料)和任何主機通訊  //inaddr_any 表示可以接收任意ip位址的資料,即繫結到所有的ip

//server_addr.sin_addr.s_addr=inet_addr("192.168.1.1");  //用於繫結到乙個固定ip,inet_addr用於把數字加格式的ip轉化為整形ip

server_addr.sin_port=htons(portnumber);         // (將本機器上的short資料轉化為網路上的short資料)埠號

/* **sockfd描述符到ip位址 */

if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)  

/* 設定允許連線的最大客戶端數 */

if(listen(sockfd,5)==-1)  

while(1)  

fprintf(stderr,"server get connection from %s\n",inet_ntoa(client_addr.sin_addr)); // 將網路位址轉換成.字串

if((nbytes=read(new_fd,buffer,1024))==-1)  

buffer[nbytes]='\0'; 

printf("server received %s\n",buffer); 

/* 這個通訊已經結束 */

close(new_fd);  

/* 迴圈下乙個 */

}  /* 結束通訊 */

close(sockfd);  

exit(0);  

}

客戶端tcp_client.c

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#define portnumber 3333

int main(int argc, char *argv)  

if((host=gethostbyname(argv[1]))==null)  

/* 客戶程式開始建立 sockfd描述符 */

if((sockfd=socket(af_inet,sock_stream,0))==-1) // af_inet:internet;sock_stream:tcp

/* 客戶程式填充服務端的資料 */

bzero(&server_addr,sizeof(server_addr)); // 初始化,置0

server_addr.sin_family=af_inet;          // ipv4

server_addr.sin_port=htons(portnumber);  // (將本機器上的short資料轉化為網路上的short資料)埠號

server_addr.sin_addr=*((struct in_addr *)host->h_addr); // ip位址

/* 客戶程式發起連線請求 */

if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)  

/* 連線成功了 */

printf("please input char:\n"); 

/* 傳送資料 */

fgets(buffer,1024,stdin);  

write(sockfd,buffer,strlen(buffer));  

/* 結束通訊 */

close(sockfd);  

exit(0);  

}

(2)udp程式設計

伺服器端udp_server.c

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#define server_port 8888 

#define max_msg_size 1024 

void udps_respon(int sockfd)  

}  int main(void)  

/* 伺服器端填充 sockaddr結構 */

bzero(&addr,sizeof(struct sockaddr_in));  

addr.sin_family=af_inet;  

addr.sin_addr.s_addr=htonl(inaddr_any);  

addr.sin_port=htons(server_port);  

/* **sockfd描述符 */

if(bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr_in))<0)  

udps_respon(sockfd); // 進行讀寫操作

close(sockfd);  

}

客戶端udp_client.c

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#define server_port 8888 

#define max_buf_size 1024 

void udpc_requ(int sockfd,const

struct sockaddr_in *addr,int len)  

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

/* 建立 sockfd描述符 */

sockfd=socket(af_inet,sock_dgram,0);  

if(sockfd<0)  

/* 填充服務端的資料 */

bzero(&addr,sizeof(struct sockaddr_in));  

addr.sin_family=af_inet;  

addr.sin_port=htons(server_port); 

if(inet_aton(argv[1],&addr.sin_addr)<0)  /*inet_aton函式用於把字串型的ip位址轉化成網路2進製數字*/

udpc_requ(sockfd,&addr,sizeof(struct sockaddr_in)); // 進行讀寫操作

close(sockfd);  

}

(3)併發伺服器設計(tcp需建立連線,故為迴圈伺服器,可通過建立乙個子程序fork()來實現;udp可併發)

伺服器端tcp_server_fork.c,客戶端同上

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#define my_port 3333

int main(int argc ,char **argv) 

bzero(&client_addr,sizeof(struct sockaddr_in)); 

client_addr.sin_family=af_inet; 

client_addr.sin_port=htons(my_port); 

client_addr.sin_addr.s_addr=htonl(inaddr_any); 

n=1; 

/* 如果伺服器終止後,伺服器可以第二次快速啟動而不用等待一段時間  */

setsockopt(listen_fd,sol_socket,so_reuseaddr,&n,sizeof(int)); 

if(bind(listen_fd,(struct sockaddr *)&client_addr,sizeof(client_addr))<0) 

listen(listen_fd,5); 

while(1) 

if((n=fork())==0) 

else

if(n<0) 

printf("fork error:%s\n\a",strerror(errno)); 

close(accept_fd); 

} }  

本文出自 「mr~鐘」 部落格,請務必保留此出處

Linux下網路程式設計(一)

一,計算機與網路的發展 計算機與網路發展的7個階段 1.批處理 20世紀50年代 是指實現將使用者個資料裝入卡帶或者磁帶。並有計算機按照一定的順序讀取,是使用者索要執行的這些程式和資料能夠一併批量得到處理的方式。2.分時系統 20世紀60年代 是指多個終端 包含滑鼠 鍵盤 顯示器等輸入輸出裝置組成,...

linux環境下網路程式設計

參考 socket是網路程序的pid,由執行程序的計算機的ip位址和程序使用的埠組成。非同步狀態下connect不阻塞,直接返回 1,connect返回 1是對的 然後通過select進行判斷是否連線上 同步狀態下connect阻塞,系統莫認時間75秒後,返回成功或失敗 tcp程式設計的流程 伺服器...

總結之linux下網路程式設計

1.有一篇好的文章,對linux下socket程式設計的原理和要點說的很清楚 2.一些windows網路程式設計的要點吧。包括大頭序,小頭序,網路位元組序。一些常用的函式等。3.linux網路程式設計 宋斌寫的,這本書不錯。寫的清楚,容易懂。是乙個比較好的參考資料。粗看了看,有不少收益。4.linu...