Linux網路程式設計之TCP程式設計
阿新 • • 發佈:2018-11-20
直接上程式碼如下所示:
1、標頭檔案定義
#ifndef __HEAD_NET_H__ #define __HEAD_NET_H__ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define PORT 8888 #define SRV_IP "192.168.7.3" #define N 5 #define SIZE 1024 #define p_error(str) ({\ perror(str);\ exit(1);}) #endif
2、伺服器端程式碼
#include "head_net.h" int main(int argc,char **argv) { int sock_fd,conn_fd; struct sockaddr_in sin,cin; socklen_t len; char cli_ip[16]; char buf[SIZE]; int ret; /*1:建立socket*/ //if( (sock_fd = socket(AF_INET,SOCK_STREAM,0)) < 0) sock_fd = socket(AF_INET,SOCK_STREAM,0); if(sock_fd < 0) p_error("socket"); int on = 1; if(setsockopt(sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)) < 0) p_error("setsockopt"); /*2:繫結地址*/ bzero(&sin,sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(PORT); sin.sin_addr.s_addr = inet_addr(SRV_IP); if(bind(sock_fd,(struct sockaddr*)&sin,sizeof(sin)) < 0) p_error("bind"); /*3:監聽*/ if(listen(sock_fd,N) < 0) p_error("listen"); /*4:連線,三次握手*/ printf("stat connect!\n"); len = sizeof(cin); if( (conn_fd = accept(sock_fd,(struct sockaddr*)&cin,&len))<0) p_error("accept"); strcpy(cli_ip,inet_ntoa(cin.sin_addr)); /*5:通訊*/ while(1){ bzero(buf,SIZE); if( (ret = read(conn_fd,buf,SIZE)) < 0) p_error("read"); else if(0 == ret){ close(sock_fd); break; } if(strncmp(buf,"quit",4) == 0) break; printf("%s:%s",cli_ip,buf); } /*6:關閉socket*/ shutdown(conn_fd,2); return 0; }
3、客戶端程式碼
#include "head_net.h" int main(int argc,char **argv) { int conn_fd; struct sockaddr_in sin; char buf[SIZE]; /*1:建立socket*/ if( (conn_fd = socket(AF_INET,SOCK_STREAM,0)) < 0) p_error("socket"); /*2:建立連線,三次握手*/ bzero(&sin,sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(PORT); sin.sin_addr.s_addr = inet_addr(SRV_IP); if( connect(conn_fd,(struct sockaddr*)&sin,sizeof(sin)) < 0) p_error("connect"); /*3:通訊*/ do{ bzero(buf,SIZE); fgets(buf,SIZE,stdin); if(write(conn_fd,buf,strlen(buf)) < 0) p_error("write"); }while(strncmp(buf,"quit",4) != 0); /*4:關閉socket*/ close(conn_fd); return 0; }