1.单进程:
server服务器:
#include<stdio.h>
  2 #include<sys/socket.h>
  3 #include<arpa/inet.h>
  4 #include<stdlib.h>
  5 #include<unistd.h>
  6 #include<string.h>
  7 #include<netinet/in.h>
  8 
  9 
 10 int connectfd,listenfd;
 11  struct sockaddr_in   serv_addr,cli_addr;
 12  int ret;
 13 socklen_t  cli_addr_len;
 14 void usage(const char* str)
 15 {
 16     printf("%s  [IP][port]\n",str);
 17 }
 18 
 19 static int  startup(const char *IP,int port){
 20 
 21     listenfd=socket(AF_INET,SOCK_STREAM,0);
 22      if(listenfd<0){
 23          perror("socket");
 24          exit(2);
 25          }
 26 
 27  serv_addr.sin_family= AF_INET;
 28  serv_addr.sin_port = htons( atoi( port) );
 29  serv_addr.sin_addr.s_addr = inet_addr(IP);
                                                                                            1,3           Top
 
 31 
 32  int   ret=bind(listenfd,(struct sockaddr*)(&(serv_addr)),sizeof(serv_addr));
 33 if(ret<0){
 34     perror("blind");
 35     exit(3);
 36     }
 37 
 38 ret=listen(listenfd,20);
 39 if(ret<0){
 40     perror("listen");
 41     exit(4);
 42     }
 43     return listenfd;
 44 }
 45 //serve : 127.0.0.1  888
 46 int main(int  argc,char* argv[])
 47 {
 48     if(argc!=3)
 49         usage(argv[0]);
 50         exit(1);
 51 
 52   int listen_sock=startup(argv[1],atoi(argv[2]));
 53  cli_addr_len=sizeof(cli_addr);
 54   connectfd=acccept(listen_sock,(struct sockaddr*)(&cli_addr),&cli_addr_len);
 55  if(connectfd<0){
 56      perror("connectfd");

28,3          51%
 exit(5);
 58      }
 59       printf("clie ip %s,clie port %d\n", inet_ntoa(cli_addr.sin_addr),ntohs(cli_addr.sin_port));
 60       int n=0;
 61       char buf[1024]={0};
 62       while(1){
 63           n=read(connectfd,buf,sizeof(buf)-1);
 64           if(n==0){
 65               printf("clie quit\n");
 66               break;
 67               }else if(n<0){
 68                   exit(6);
 69                   }else{
 70                       buf[n]=0;
 71                       printf("cli say :%s\n",buf);
 72                       write(connectfd,buf,strlen(buf));
 73                       }
 74 
 75           }
 76           close(connectfd);
 77           close(listenfd);
 78 
 79           return 0;
 80 }
client服务器:
1 #include<stdio.h>                                                                                         
  2 #include<stdlib.h>
  3 #include<unistd.h>
  4 #include<string.h>
  5 #include<netinet/in.h>
  6 #include<sys/socket.h>
  7 #include<arpa/inet.h>
  8 
  9 
 10 
 11 void  usage(const char* str)
 12 {
 13     printf("%s,IP[],port[]",str);
 14 }
 15 
 16 int main(int argc,char* argv[])
 17 {
 18     if(argc!=3){
 19         usage(argv[0]);
 20         exit(0);
 21         }
 22   struct sockaddr_in serv_addr;
 23   int sockfd;
 24   sockfd=socket(AF_INET,SOCK_STREAM,0);
 25   if(sockfd<0){
 26       perror("sock");
 27       exit(1);
 28       }
 29       serv_addr.sin_family = AF_INET;
 serv_addr.sin_port = htons(atoi(argv[2]));
 31       serv_addr.sin_addr.s_addr = inet_addr(argv[1]); 
 32       // linl serve 
 33       int ret=connect(sockfd,(struct sockaddr*)(&serv_addr),sizeof(serv_addr));
 34       if(ret<0){
 35           perror("connect");
 36           exit(2);
 37           }
 38 
 39           int n=0;
 40           char buf[1024]={0};
 41           while(1){
 42               printf("client# ");
 43               fflush(stdout);
 44               n=read(0,buf,sizeof(buf)-1);
 45               buf[n-1]='\0';
 46               write(sockfd,buf,strlen(buf));
 47 
 48               n=read(sockfd,buf,sizeof(buf)-1);
 49               buf[n]=0;
 50               printf("server echo#: %s\n",buf);
 51               }
 52               close(sockfd);
 53               return 0;
 54 }       
多线程socket 
server:int main(int argc,char* argv[])
127 {
128 
129     if(argc!=3){
130         usage(argv[0]);
131         exit(1);
132         }
133             int listen_sock=startup(argv[1],argv[2]);
134             cli_addr_len=sizeof(cli_addr);
135         while(1){
136             connectfd=accept(listen_sock,(struct sockaddr*)(&cli_addr),&cli_addr_len);
137             if(connectfd>0){
138                 pid_t id=fork();
139                 if(id==0){//child
140                     if(fork()>0){
141                         exit(1);
142                         }else{
143                             char buf[1024];
144                             while(1){
145 
146                                  int         n=read(connectfd,buf,sizeof(buf)-1);
147                                     if(n==0){
148                                      printf("cli is quit");
149                                         break;
150                                        }else if(n<0){
151                                                exit(6);
                                                 }else {
153                                                     buf[n]=0;
154                                                     printf("cli is say:%s\n",buf);
155                                                      write(connectfd,buf,strlen(buf));
156                                                       }
157                                       }
158                                 }
159                     }else{//father
160                         close(connectfd);
161                         }
162                 }
163                 else{
164                     break;
165                     }
166             }
167 }
多进程sock
server:
 //Version 2 
 84 //void* newpthread(char* arg)
 85 //{
 86  ///    int s=(int) arg;
 87 //   char buf[1024]={0};
 88 //   while(1){
 89  //   int        n=read(s,buf,sizeof(buf)-1);
 90 //       if(n==0){
 91 //           printf("cli is quit");
 92 //           break;
 93 //           }else if(n<0){
 94 //               exit(6);
 95 //               }else {
 96 //                   buf[n]=0;
 97 //                   printf("cli is say:%s\n",buf);
 98 //                   write(s,buf,strlen(buf));
 99 //                   }
100 //       }
101 //       pthread_exit(NULL);
102 //}
103 //int  main(int argc ,char* argv[])
104 //{/
105 //  if(argc!=3){
106 //      usage(argv[1]);
107 //      exit(1);
108 //      }
109

//      int listen_sock=startup(argv[1],atoi(argv[2]));
111   //  cli_addr_len=sizeof(cli_addr);
112   //  connectfd=accept(listen_sock,(struct sockaddr*)(&cli_addr),&cli_addr_len); 
113 //   if(connectfd<0){
114 //   perror("connectfd");
115 //   exit(5);
116 //   }
117 //    printf("clie ip %s,clie port %d\n", inet_ntoa(cli_addr.sin_addr),ntohs(cli_addr.sin_port));
118   //   pthread_t tid;
119 //   pthread_create(&tid,NULL,newpthread,(void*)connectfd);
120 //   pthread_detach(tid);
121 
122 //   return 0;
123 //}

socket编程TCP通信相关推荐

  1. java socket 通信协议_java 基于TCP协议的Socket编程和通信

    java 基于 TCP 协议的 Socket 编程和通信 在网络通讯中,第一次主动发起通讯的程序被称作客户 端 (Client) 程序, 简称客户端, 而在第一次通讯中等待连接的 程序被称作服务器端 ...

  2. socket编程 TCP 粘包和半包 的问题及解决办法

    socket编程 TCP 粘包和半包 的问题及解决办法 参考文章: (1)socket编程 TCP 粘包和半包 的问题及解决办法 (2)https://www.cnblogs.com/panchang ...

  3. socket编程TCP/IP通信(windows下,C++实现)

    1.简单理解什么是Socket? 通俗理解: Socket翻译成中文是套接字,同时也有插座的意思.可以按照插座的意思来理解它,插座就是连接电源和机器的中间件,同理,socket就是连接两个进程或应用的 ...

  4. 【Linux网络】Linux Socket编程 TCP协议

    话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. --有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程 ...

  5. 1、Linux中的socket与TCP通信

    socket介绍 1.所谓 socket(套接字),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象. 2.一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制. ...

  6. qt tcp通信_Qt之网络编程TCP通信

    点击上方"Qt学视觉",选择"星标"公众号重磅干货,第一时间送达 想要学习的同学们还请认真阅读每篇文章,相信你一定会有所收获 TCP通信概述 TCP(Trans ...

  7. c语言广播程序,C语言socket编程---udp通信及广播

    上篇实现了TCP通信的例子.由于项目中需要一个服务器向多台客户端发送消息. 通过udp这种无连接的通信,将client.c增加一句 /* 设置通讯方式对广播,即本程序发送的一个消息,网络上所有主机均可 ...

  8. Java网络编程 - TCP通信

    文章目录 TCP通信 快速入门(一发一收) 编写客户端代码 编写服务器代码 多发多收 多发多收(同时接受多个客户端) 线程池优化 TCP通信 快速入门(一发一收) TCP协议回顾: TCP是一种面向连 ...

  9. Socket编程 | TCP编程基本流程和API详解-1

    1. 基本概念 TCP (即传输控制协议) 是一种面向连接的传输层协议,它能提供高可靠性通信 (即数据无误.数据无丢失.数据无失序.数据无重复到达的通信). 2. 通信流程解析 TCP 通信的流程与打 ...

最新文章

  1. Android Jetpack组件之ViewModel使用
  2. 合理的使用纯函数式编程
  3. list mybatis批量保存_mybatis 批量将list数据插入到数据库的实现
  4. javascript canvas九宫格小程序
  5. CSVDE批量导入域用户
  6. c语言程序设计二级考试哪些题型,计算机二级考试题型
  7. 谷歌安装器 android8.0,Android 8.0版本安装谷歌四件套
  8. ROS配置ipv6方法
  9. 学习Spring之前要先学习什么?
  10. 盘点前端开发常用的几款编辑器
  11. 快应用中实现自定义抽屉组件
  12. 计算机一级解释,独家秘笈计算机一级错题解释.ppt
  13. iptables之state模块使用
  14. MVC项目文件夹说明和创建MVC
  15. 整理:Visual Studio Code (vscode) 配置C、C++环境/编写运行C、C++(主要Windows、简要Linux)
  16. (三)给亚马逊的EC2增加磁盘空间并安装cuDNN、AutoGluon等
  17. 怎么把flv转换成mp4格式?
  18. 计算机专业,刚上大一,该如何学习?
  19. oracle11g安装完成如何打开界面
  20. 国巨董事长:被动元件将缺货到2019,芯片电阻是重灾区

热门文章

  1. spring aop 环绕通知around和其他通知的区别
  2. Linux命令行上执行操作,不退回命令行的解决方法
  3. mysql innodb 数据恢复
  4. linux 禁ping设置
  5. 51CTO微博认证说明
  6. CodeForces - 1517D Explorer Space(dp)
  7. Matlab中plot函数绘图基本用法
  8. GitPages个人域名博客
  9. Keras-训练可视化
  10. mysql的explain的用途,利用Explain来分析和优化你的mysql