(1)tcp程式設計
伺服器端tcp_server.c
#include客戶端tcp_client.c#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);
}
#include(2)udp程式設計#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);
}
伺服器端udp_server.c
#include客戶端udp_client.c#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);
}
#include(3)併發伺服器設計(tcp需建立連線,故為迴圈伺服器,可通過建立乙個子程序fork()來實現;udp可併發)#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);
}
伺服器端tcp_server_fork.c,客戶端同上
#include本文出自 「mr~鐘」 部落格,請務必保留此出處#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);
} }
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...