TCP网络程序设计
课程索引
1 . 编程模型函数化
1 . 1 手把手学函数
创建套接字socket
绑定地址bind
1 . 2 地址类型
1 . 3 地址转换
• in_addr_t inet_addr(const char *cp)
功能:将字符串形式的IP地址转化为整数型的IP地址(网络字节序)
范例: in_addr.saddr = inet_addr(“192.168.1.1” );
• char *inet_ntoa (struct in_addr)
功能: 将整数形式的IP地址转化为字符串形式的IP地址
网络字节序
1 . 4 网络字节序
uint32_t htonl(uint32_t hostlong);
将32位的数据从主机字节序转换为网 络字节序
in_addr.saddr = htonl(INADDR_ANY)
uint16_t htons(uint16_t hostshort);
将16位的数据从主机字节序转换为网络字节序
将16位的数据从主机字节序转换为网络字节序
uint32_t ntohl(uint32_t netlong);
将32位的数据从网络字节序转换为主机字节序
uint16_t ntohs(uint16_t netshort);
将16位的数据从网 络字节序转换为主机字节序
设置监听端口listen
等待连接accept
发送数据send
接收数据recv
关闭连接close
连接服务器connect
tcp_server.c
1 #include <stdio.h> 2 #include <sys/socket.h> 3 #include <string.h> 4 #include <netinet/in.h> 5 6 #define portnum 3333 7 8 int main() 9 { 10 int sockfd ,new_fd; 11 struct sockaddr_in server_addr; 12 struct sockaddr_in client_addr; 13 char buffer[128]; 14 int nbyte; 15 int sin_size; 16 //创建套接字 17 if((sockfd = socket(AF_INET,SOCK_STREAM,0))== -1) 18 { 19 printf("create socket error.\n"); 20 exit(1); 21 } 22 //2.1设置要绑定的地址 23 bzero(&server_addr,sizeof(struct sockaddr_in)); 24 sockaddr_in.sin_family = AF_INET; 25 sockaddr_in.sin_port = htons(portnum);//客户机转为网络字符序 26 sockaddr_in.sin_addr.s_addr = htonl(INADDR_ANY);//客户机转为网络字符序 27 //2.2绑定地址 28 bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)); 29 //3.监听端口 30 listen(sockfd,5); 31 while(1) 32 { 33 //4.等待连接 34 sin_size = sizeof(struct sockaddr); 35 new_fd = accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size); 36 printf("server get connection from %s\n",inet_ntoa(client_addr.sin_addr)); 37 //5.接收数据 38 nbyte = recv(new_fd,buffer,128,0); 39 buffer[nbyte]=‘\0‘; 40 printf("server received : %s\n",buffer); 41 //6.结束连接 42 colse(new_fd); 43 44 } 45 close(sockfd); 46 47 return 0; 48 }
tcp_client.c
1 #include <stdio.h> 2 #include <string.h> 3 #include <sys/socket.h> 4 #include <netinet/in.h> 5 6 #define portnum 3333 7 8 int main() 9 { 10 struct sockaddr_in server_addr; 11 int sockfd; 12 char buffer[128]; 13 14 //1.创建套接字 15 if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1) 16 { 17 printf("create socket error.\n"); 18 exit(1); 19 } 20 //2.1设置要链接的服务器的地址 21 bzero(&server_addr,sizeof(struct sockaddr_in)); 22 server_addr.sin_family = AF_INET; 23 server_addr.sin_port = htons(portnum); 24 server_addr.sin_addr.s_addr = inet_addr("192.168.1.113");//服务器IP地址 25 //2.链接服务器 26 if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)) == -1) 27 { 28 printf("connect error.\n"); 29 exit(1); 30 } 31 //3.发送数据到服务器 32 printf("Please input char:\n"); 33 fgets(buffer,128,stdin); 34 send(sockfd,buffer,strlen(buffer),0); 35 //4.关闭连接 36 close(sockfd); 37 38 return 0; 39 }
原文:http://www.cnblogs.com/love-linux/p/5208455.html