服务端:

 1 #include<sys/socket.h>
 2 #include<sys/types.h>
 3 #include<stdio.h>
 4 #include<unistd.h>
 5 #include<stdlib.h>
 6 #include<string.h>
 7 #include<netdb.h>
 8 #include<netinet/in.h>
 9 #include<arpa/inet.h>
10 #include<pthread.h>
11
12
13 void recv_data(void* fd)
14 {
15     int sockfd = *((int *)fd);
16     char buf[200];
17     int  renum;
18     while(1)
19     {
20     bzero(buf, 200);
21
22     if((renum = recv(sockfd, buf, 200, 0)) > 0)
23     {
24         printf("recv: %s\n", buf);
25     }
26     else if(renum == -1)
27     {
28         printf("recv -1");
29         exit(-1);
30     }
31     }
32 }
33 int main(void)
34 {
35     pthread_t pid;
36     int sockfd;
37     struct sockaddr_in serveraddr;
38
39     char buf[200];
40     sockfd = socket(AF_INET, SOCK_STREAM, 0);
41     bzero(&serveraddr, sizeof(struct sockaddr));
42     serveraddr.sin_family = AF_INET;
43     serveraddr.sin_port = htons(4444);
44     serveraddr.sin_addr.s_addr = inet_addr("192.168.0.100");
45
46
47     if(connect(sockfd, (struct sockaddr *)&serveraddr, sizeof(struct sockaddr)) == -1)
48     {
49         printf("connect failed\n");
50         exit(-1);
51     }
52     else
53         printf("connect succeed \n");
54     pthread_create(&pid, NULL, (void*)recv_data,(void*)&sockfd);
55     while(1)
56     {
57         memset(buf, 0, 200);
58         gets(buf);
59
60         send(sockfd, buf, strlen(buf), 0);
61         if(strncmp(buf, "quit", 4) == 0)
62         {
63             close(sockfd);
64             return 0;
65         }
66
67     }
68     close(sockfd);
69     return 0;
70 }

客户端:

  1 #include<sys/socket.h>
  2 #include<sys/types.h>
  3 #include<stdio.h>
  4 #include<unistd.h>
  5 #include<stdlib.h>
  6 #include<string.h>
  7 #include<netdb.h>
  8 #include<netinet/in.h>
  9 #include<arpa/inet.h>
 10 #include<pthread.h>
 11
 12 void recv_data(void* fd)
 13 {
 14     int sockfd = *((int *)fd);
 15     char buf[200];
 16     int  renum;
 17     while(1)
 18     {
 19         bzero(buf, 200);
 20
 21         //recv(sockfd, buf, 200, 0);//如果断开 ,recv不再阻塞  返回值 0
 22         //printf("recv: %s\n", buf);
 23
 24         if((renum = recv(sockfd, buf, 200, 0)) > 0)
 25             printf("recv: %s\n", buf);
 26         else if(renum == -1)
 27         {
 28             printf("recv -1");
 29             exit(-1);
 30         }
 31         else
 32         {
 33             close(sockfd);
 34             exit(1);
 35
 36         }
 37
 38
 39     }
 40
 41 }
 42 int main(void)
 43 {
 44     pthread_t pid;
 45     int sockfd, clientfd;
 46     int sinsize;
 47     char buf[200];
 48     struct sockaddr_in myaddr, clientaddr;
 49     sockfd = socket(AF_INET, SOCK_STREAM, 0);
 50     if(sockfd == -1)
 51     {
 52         printf("socket failed\n");
 53         exit(-1);
 54     }
 55     printf("%d\n", sockfd);
 56
 57     bzero(&myaddr, sizeof(struct sockaddr));
 58     myaddr.sin_family = AF_INET;
 59     myaddr.sin_port = htons(4444);
 60     myaddr.sin_addr.s_addr =inet_addr("192.168.0.100");
 61     sinsize = 1;
 62     setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &sinsize, sizeof(int));
 63     if(bind(sockfd, (struct sockaddr*)&myaddr, sizeof(struct sockaddr)) == -1)
 64     {
 65         printf("bind failed\n");
 66         exit(-1);
 67     }
 68
 69     if(listen(sockfd, 1) == -1)
 70     {
 71         printf("listen failed\n");
 72         exit(-1);
 73     }
 74     sinsize = sizeof(struct sockaddr);
 75     if((clientfd = accept(sockfd, (struct sockaddr *)&clientaddr, &sinsize)) == -1)
 76     {
 77         printf("accept failed\n");
 78         exit(-1);
 79     }
 80     else
 81         printf("accept succeed\n");
 82     pthread_create(&pid, NULL, (void*)recv_data,(void*)&clientfd);
 83     while(1)
 84     {
 85         memset(buf, 0, 200);
 86         gets(buf);
 87         if(strncmp(buf, "quit", 4) == 0)
 88         {
 89             close(clientfd);
 90             close(sockfd);
 91             return 0;
 92         }
 93         send(clientfd, buf, strlen(buf), 0);
 94     }
 95     sleep(1);
 96
 97     close(clientfd);
 98     close(sockfd);
 99
100     return 0;
101 }

Socket编程:之双机通信相关推荐

  1. java web接收tcp_Java多线程实现TCP网络Socket编程(C/S通信)

    开篇必知必会 在前一篇<基于TCP协议网络socket编程(java实现C/S通信)>,实际存在一个问题,如果服务器端在建立连接后发送多条信息给客户端,客户端是无法全部接收的,原因在于客户 ...

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

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

  3. 双网卡服务器SOCKET编程指定客户端通信网卡

    网络编程中有时明明用eth0的地址来bind一个udp套接口, 可是发出去的包却是从eht1走的, 在网上找到这么一段话解释该问题: 在多 IP/网卡主机上,UDP 包/协议会自动根据路由最优来选择从 ...

  4. 计算机网络实验设计-利用Socket实现双机通信

    文章目录 实验目的: 具体要求: 我的实现程度 思路 关键代码和解释 实验目的: 利用 Socket 来实现双机通信,理解 TCP 状态机图 实验内容:使用 Socket 编程,采用其中的 TCP 面 ...

  5. JavaSE-网络socket编程

    图解应用通信过程 如下图所示,网络通信过程即通过ip找到指定主机,再通过逻辑端口号找到指定应用 通过java api获取ip地址 InetAddress i = InetAddress.getLoca ...

  6. Socket 编程实现基于 HTTP 协议的客户和服务

    目录 前言 研究背景及意义 研究内容及方法 研究要求与目标 相关知识点 HTTP协议 TCP协议 UDP协议 Socket编程技术 需求分析 Socket编程 Swing包 多线程的应用 功能设计 功 ...

  7. 单片机双机通信c语言实验心得,80C51单片机双机通信与多机通信的使用方法

    80C51单片机之间的串行通信主要可分为双机通信和多机通信,本节举例说明双机通信与多机通信的使用方法. 1.双机通信硬件电路如果两个80C51单片机系统距离较近,那么就可以将它们的串行口直接相连,实现 ...

  8. 1.1 利用Socket实现双机通信

    利用Socket实现双机通信 目的 环境 所需知识 实验分析 实验结果 代码 目的 利用WinSock来实现双机通信,理解TCP状态图 要求使用WinSock编程,采用其中的TCP面向连接方式,实现文 ...

  9. Socket编程(C语言实现)—— AF_INET(典型的TCP/IP四层模型的通信过程),AF_UNIX(本地进程间通信)

    1.AF_INET域与Socket通信 其是典型的TCP/IP四层模型的通信过程. (1)接收方与发送方依赖IP和port来标识,即,将本地socket绑定到对应的IP端口上: (2)发送数据时指定对 ...

  10. Socket编程(C语言实现)——TCP协议(网络间通信AF_INET)的流式(SOCK_STREAM)+报式(SOCK_DGRAM)传输【多线程+循环监听】

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

最新文章

  1. 书评:卓有成效的ThoughtWorks程序员的45个习惯
  2. android版 模拟器哪个好,安卓模拟器电脑版哪个好
  3. java不同进程的相互唤醒_Java多线程(二)同步与等待唤醒
  4. wifi卡慢延迟高_家里WiFi特别卡,网络延迟高,可能不是网速的问题
  5. 让 AI “潜入”物流中心,你的快递很快就到!
  6. MySQL添加唯一约束和联合唯一约束(建表后添加)
  7. 图像分类数据集类型--典型模型--相关论文
  8. 1.10 Linux文件目录用户与用户组修改
  9. @value取不到值_Bamboo window上环境变量 HOMEDRIVE 及 HOMEPATH 获取不到的问题
  10. 在国外当程序员到底爽不爽?
  11. Asp.net 2.0在Windows 2003 Server 上配置Microsoft Excel、Microsoft Word应用程序权限时 error: 8000401a 的解决方法!...
  12. 高频量化交易之王--李庆在华尔街
  13. 基于Go的马蜂窝旅游网分布式IM系统技术实践
  14. 重构实例-消息发送-原始代码及准备-1
  15. OpenStreetMap初探(一)——了解OpenStreetMap
  16. 单样本t检验、独立样本t检验、配对样本t检验_python_数据分析_7
  17. Diagonal Scaling
  18. Application生命周期
  19. oracle游标等待,Oracle Mutex 等待事件之: cursor mutex X
  20. SCAU高级语言程序设计--实验10 指针与结构体(1)

热门文章

  1. Dubbo的优化 --- 开发时使用
  2. safari图片跨域
  3. 使用wireshark抓包工具 检测不到本地网卡
  4. redis的分布式解决方式--codis
  5. 数据库——环境初建改端口和密码(转)
  6. Thinking in java第一章对象导论
  7. 编译cvaux错误的原因
  8. [导入]Ms XmlDom 异步装载Xml文件
  9. C语言数组学完学啥,我的c语言学习-数组专题
  10. angular 加入原生html,Angular HTML绑定