Socket编程:之双机通信
服务端:
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编程:之双机通信相关推荐
- java web接收tcp_Java多线程实现TCP网络Socket编程(C/S通信)
开篇必知必会 在前一篇<基于TCP协议网络socket编程(java实现C/S通信)>,实际存在一个问题,如果服务器端在建立连接后发送多条信息给客户端,客户端是无法全部接收的,原因在于客户 ...
- socket编程TCP/IP通信(windows下,C++实现)
1.简单理解什么是Socket? 通俗理解: Socket翻译成中文是套接字,同时也有插座的意思.可以按照插座的意思来理解它,插座就是连接电源和机器的中间件,同理,socket就是连接两个进程或应用的 ...
- 双网卡服务器SOCKET编程指定客户端通信网卡
网络编程中有时明明用eth0的地址来bind一个udp套接口, 可是发出去的包却是从eht1走的, 在网上找到这么一段话解释该问题: 在多 IP/网卡主机上,UDP 包/协议会自动根据路由最优来选择从 ...
- 计算机网络实验设计-利用Socket实现双机通信
文章目录 实验目的: 具体要求: 我的实现程度 思路 关键代码和解释 实验目的: 利用 Socket 来实现双机通信,理解 TCP 状态机图 实验内容:使用 Socket 编程,采用其中的 TCP 面 ...
- JavaSE-网络socket编程
图解应用通信过程 如下图所示,网络通信过程即通过ip找到指定主机,再通过逻辑端口号找到指定应用 通过java api获取ip地址 InetAddress i = InetAddress.getLoca ...
- Socket 编程实现基于 HTTP 协议的客户和服务
目录 前言 研究背景及意义 研究内容及方法 研究要求与目标 相关知识点 HTTP协议 TCP协议 UDP协议 Socket编程技术 需求分析 Socket编程 Swing包 多线程的应用 功能设计 功 ...
- 单片机双机通信c语言实验心得,80C51单片机双机通信与多机通信的使用方法
80C51单片机之间的串行通信主要可分为双机通信和多机通信,本节举例说明双机通信与多机通信的使用方法. 1.双机通信硬件电路如果两个80C51单片机系统距离较近,那么就可以将它们的串行口直接相连,实现 ...
- 1.1 利用Socket实现双机通信
利用Socket实现双机通信 目的 环境 所需知识 实验分析 实验结果 代码 目的 利用WinSock来实现双机通信,理解TCP状态图 要求使用WinSock编程,采用其中的TCP面向连接方式,实现文 ...
- Socket编程(C语言实现)—— AF_INET(典型的TCP/IP四层模型的通信过程),AF_UNIX(本地进程间通信)
1.AF_INET域与Socket通信 其是典型的TCP/IP四层模型的通信过程. (1)接收方与发送方依赖IP和port来标识,即,将本地socket绑定到对应的IP端口上: (2)发送数据时指定对 ...
- Socket编程(C语言实现)——TCP协议(网络间通信AF_INET)的流式(SOCK_STREAM)+报式(SOCK_DGRAM)传输【多线程+循环监听】
Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...
最新文章
- 书评:卓有成效的ThoughtWorks程序员的45个习惯
- android版 模拟器哪个好,安卓模拟器电脑版哪个好
- java不同进程的相互唤醒_Java多线程(二)同步与等待唤醒
- wifi卡慢延迟高_家里WiFi特别卡,网络延迟高,可能不是网速的问题
- 让 AI “潜入”物流中心,你的快递很快就到!
- MySQL添加唯一约束和联合唯一约束(建表后添加)
- 图像分类数据集类型--典型模型--相关论文
- 1.10 Linux文件目录用户与用户组修改
- @value取不到值_Bamboo window上环境变量 HOMEDRIVE 及 HOMEPATH 获取不到的问题
- 在国外当程序员到底爽不爽?
- Asp.net 2.0在Windows 2003 Server 上配置Microsoft Excel、Microsoft Word应用程序权限时 error: 8000401a 的解决方法!...
- 高频量化交易之王--李庆在华尔街
- 基于Go的马蜂窝旅游网分布式IM系统技术实践
- 重构实例-消息发送-原始代码及准备-1
- OpenStreetMap初探(一)——了解OpenStreetMap
- 单样本t检验、独立样本t检验、配对样本t检验_python_数据分析_7
- Diagonal Scaling
- Application生命周期
- oracle游标等待,Oracle Mutex 等待事件之: cursor mutex X
- SCAU高级语言程序设计--实验10 指针与结构体(1)