RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
unixsocket网络编程TCP简单例子
  1. server.c 
  2.  
  3. #include          
  4. #include  
  5. #include  
  6. #include  
  7. #include  
  8. #include  
  9. #include  
  10. #include  
  11.  
  12.  
  13.  
  14.  
  15. int main(int argc, char** argv) 
  16. { 
  17.     int ret; 
  18.      
  19. //创建socket文件 
  20.     int sockfd = socket(AF_INET, SOCK_STREAM, 0); 
  21.     if(sockfd == -1) 
  22.     { 
  23.         perror("socket\n"); 
  24.         exit(1); 
  25.     } 
  26.     printf("socket_fd = %d\n",sockfd); 
  27.      
  28. //重复使用本地址与socket文件进行绑定,如果不设置系统,会保留此连接直到最后一引用才释放,即进程结束后系统需要几分钟后才能重新进行绑定 
  29.     int i = 1; 
  30.     ret = setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i)); 
  31.     if(ret) 
  32.     { 
  33.         perror("setsockopt\n"); 
  34.         exit(1);     
  35.     } 
  36.     printf("setsockopt complete!\n"); 
  37. //创建服务器socket地址sock_addr 
  38.     struct sockaddr_in server_addr; 
  39.     server_addr.sin_family = AF_INET; 
  40.     server_addr.sin_port = htons(4444); 
  41.     //地址指定INADDR_ANY表示可以接收安装在系统里面所有网卡的数据包 
  42.     server_addr.sin_addr.s_addr = INADDR_ANY; 
  43.     memset(server_addr.sin_zero, 8, 8); 
  44.      
  45. //将socket与地址进行绑定,这样可以使所有发向端口4444及协议为IPV4数据包指向socket文件 
  46.     ret =  bind(sockfd, (struct sockaddr*)&server_addr, sizeof(struct sockaddr)); 
  47.     if(ret) 
  48.     { 
  49.         perror("bind\n"); 
  50.         exit(1);     
  51.     } 
  52.     printf("bind complete!\n"); 
  53.      
  54. //监听连接到该socket上请求,不会发生阻塞行为,以下设置队列大小为1,即队列满的时候其它连接会被拒绝连接 
  55.     ret = listen(sockfd, 10); 
  56.     if(ret) 
  57.     { 
  58.         perror("listen\n"); 
  59.         exit(1);     
  60.     } 
  61.     printf("listen complete!\n"); 
  62.      
  63. //接收连接请求并建立连接, 如果没有连接请求 accept会一址阻塞,直到有请求来 
  64.     struct sockaddr_in client_addr; 
  65.     int client_fd; 
  66.     socklen_t len = sizeof(struct sockaddr); 
  67.     client_fd = accept(sockfd, (struct sockaddr*)&client_addr, &len); 
  68.     if(client_fd == -1) 
  69.     { 
  70.         perror("bind\n"); 
  71.         exit(1);     
  72.     } 
  73.     printf("accept complete!\n"); 
  74.      
  75. //请取client发来的信息 
  76.  
  77.     char buf[100]; 
  78.     ssize_t readnum; 
  79.     memset(buf,100,0);
  80.  
  81. //这里应该是客户端的socket文件描述符 
  82.     readnum = recv(client_fd, (void*)buf, 100, MSG_WAITALL); 
  83.     //清空标准输出 
  84.     fflush(stdout); 
  85.     printf("received:%s\nnumber byte:%d\n",buf,strlen(buf)); 
  86.      
  87.      
  88. //发送信息到用户端 
  89.  
  90.     ssize_t sendnum; 
  91.     char content[100]="\"server:received the data!\""; 
  92.     sendsendnum = send(client_fd, content, 100, 0); 
  93.     printf("reply:%s\nnumber byte:%d\n",content,sendnum); 
  94.      
  95. // 关闭socket文件    
  96.     close(sockfd); 
  97.     close(client_fd); 
  98.      
  99.     return 0; 
  100. } 
  101.  
  102.  
  103.  
  104. client.c 
  105.  
  106. #include          
  107. #include  
  108. #include  
  109. #include  
  110. #include  
  111. #include  
  112. #include  
  113. #include  
  114. #include  
  115.  
  116.  
  117.  
  118.  
  119.  
  120. int main(int argc, char** argv) 
  121. { 
  122.     int ret; 
  123.      
  124. //创建socket文件 
  125.     int sockfd = socket(AF_INET, SOCK_STREAM, 0); 
  126.     if(sockfd == -1) 
  127.     { 
  128.         perror("socket\n"); 
  129.         exit(1); 
  130.     } 
  131.     printf("socket_fd = %d\n",sockfd); 
  132.      
  133. //创建服务器socket地址sock_addr 
  134.     struct sockaddr_in server_addr; 
  135.     server_addr.sin_family = AF_INET; 
  136.     server_addr.sin_port = htons(4444); 
  137.     //将字符串地址转换成网络地址,有两种方法 
  138.     inet_pton(AF_INET, "127.0.0.1", (void*)&server_addr.sin_addr.s_addr);//IPV4 IPV6可用 
  139.     //server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");//只能转IPV4 
  140.     memset(server_addr.sin_zero, 8, 0); 
  141.  
  142. //连接服务端 
  143.     ret = connect(sockfd, (struct sockaddr*)&server_addr,sizeof(struct sockaddr)); 
  144.     if(ret == -1) 
  145.     { 
  146.         perror("connect\n"); 
  147.         exit(1);         
  148.     } 
  149.     printf("connect complete!\n"); 
  150.      
  151. //发送信息 
  152.     char content[100] = "\"hello,i am client!\""; 
  153.     ssize_t sendsendnum = send(sockfd, content, strlen(content)+1, 0); 
  154.     printf("send complete\nnumber byte:%d\ncontent:%s\n",sendnum,content); 
  155.      
  156. //收信息 
  157.     char buf[100]; 
  158.     ssize_t readnum; 
  159.     memset(buf,100,0); 
  160.     readnum = recv(sockfd, (void*)buf, 100, MSG_WAITALL); 
  161.     //清空标准输出 
  162.     fflush(stdout); 
  163.     printf("received:%s\nnumber byte:%d\n",buf,strlen(buf)); 
  164.      
  165. //关闭socket 
  166.     close(sockfd); 
  167.     return 0; 
  168. } 

 

鹤峰网站建设公司创新互联,鹤峰网站设计制作,有大型网站制作公司丰富经验。已为鹤峰千余家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的鹤峰做网站的公司定做!


分享名称:unixsocket网络编程TCP简单例子
浏览路径:http://myadxq.com/article/jhoegg.html