嵌入式linux的网络编程(3)--TCP Client程序设计

2019-07-12 15:56发布

嵌入式linux的网络编程(3)--TCP Client程序设计CSDN2013年度博客之星评选活动开始,本人有幸入围参加评选,如果博客中的文章对你有所帮助,请为 ce123 投上宝贵一票,非常感谢!
投票地址:http://vote.blog.csdn.net/blogstaritem/blogstar2013/ce123

1.概述

客户端主要需要完成与服务器建立连接,请求数据,应答数据等工作.从代码上来看,客户端程序有很多代码与服务器端程序类似,我们先给出一个简单的客户端源码,随后进行详细的讲解. 1 /**************************************************************************************/ 2 /*简介:TCPClient示例。 */ 3 /*************************************************************************************/ 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 13 int main(int argc, char *argv[]) 14 { 15 int sockfd; 16 char buffer[1024]; 17 struct sockaddr_in server_addr; 18 struct hostent *host; 19 int portnumber,nbytes; 20 21 if(argc!=3) 22 { 23 printf("Usage:%s hostname portnumbera ",argv[0]); 24 exit(1); 25 } 26 27 if((host=gethostbyname(argv[1]))==NULL) 28 { 29 herror ("Get host name error "); 30 exit(1); 31 } 32 33 if((portnumber=atoi(argv[2]))<0) 34 { 35 printf("Usage:%s hostname portnumbera ",argv[0]); 36 exit(1); 37 } 38 39 /* 客户程序开始建立 sockfd描述符 */ 40 if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) 41 { 42 printf("Socket Error:%sa ",strerror(errno)); 43 exit(1); 44 } 45 /* 客户程序填充服务端的资料 */ 46 bzero(&server_addr,sizeof(server_addr)); 47 server_addr.sin_family=AF_INET; 48 server_addr.sin_port=htons(portnumber); 49 server_addr.sin_addr=*((struct in_addr *)host->h_addr); 50 /* 客户程序发起连接请求 */ 51 if(connect(sockfd,(struct sockaddr *)(&server_addr), 52 sizeof(struct sockaddr))==-1) 53 { 54 printf("Connect Error:%s(%d)a ",strerror(errno),errno); 55 exit(1); 56 } 57 /* 连接成功了 */ 58 if((nbytes=read(sockfd,buffer,1024))==-1) 59 { 60 printf("Read Error:%s ",strerror(errno)); 61 exit(1); 62 } 63 buffer[nbytes]='