Socket编程:之双机通信
服务端:
#include<sys/socket.h>
#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<netdb.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<pthread.h> void recv_data(void* fd)
{
int sockfd = *((int *)fd);
char buf[];
int renum;
while()
{
bzero(buf, ); if((renum = recv(sockfd, buf, , )) > )
{
printf("recv: %s\n", buf);
}
else if(renum == -)
{
printf("recv -1");
exit(-);
}
}
}
int main(void)
{
pthread_t pid;
int sockfd;
struct sockaddr_in serveraddr; char buf[];
sockfd = socket(AF_INET, SOCK_STREAM, );
bzero(&serveraddr, sizeof(struct sockaddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons();
serveraddr.sin_addr.s_addr = inet_addr("192.168.0.100"); if(connect(sockfd, (struct sockaddr *)&serveraddr, sizeof(struct sockaddr)) == -)
{
printf("connect failed\n");
exit(-);
}
else
printf("connect succeed \n");
pthread_create(&pid, NULL, (void*)recv_data,(void*)&sockfd);
while()
{
memset(buf, , );
gets(buf); send(sockfd, buf, strlen(buf), );
if(strncmp(buf, "quit", ) == )
{
close(sockfd);
return ;
} }
close(sockfd);
return ;
}
客户端:
#include<sys/socket.h>
#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<netdb.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<pthread.h> void recv_data(void* fd)
{
int sockfd = *((int *)fd);
char buf[];
int renum;
while()
{
bzero(buf, ); //recv(sockfd, buf, 200, 0);//如果断开 ,recv不再阻塞 返回值 0
//printf("recv: %s\n", buf); if((renum = recv(sockfd, buf, , )) > )
printf("recv: %s\n", buf);
else if(renum == -)
{
printf("recv -1");
exit(-);
}
else
{
close(sockfd);
exit(); } } }
int main(void)
{
pthread_t pid;
int sockfd, clientfd;
int sinsize;
char buf[];
struct sockaddr_in myaddr, clientaddr;
sockfd = socket(AF_INET, SOCK_STREAM, );
if(sockfd == -)
{
printf("socket failed\n");
exit(-);
}
printf("%d\n", sockfd); bzero(&myaddr, sizeof(struct sockaddr));
myaddr.sin_family = AF_INET;
myaddr.sin_port = htons();
myaddr.sin_addr.s_addr =inet_addr("192.168.0.100");
sinsize = ;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &sinsize, sizeof(int));
if(bind(sockfd, (struct sockaddr*)&myaddr, sizeof(struct sockaddr)) == -)
{
printf("bind failed\n");
exit(-);
} if(listen(sockfd, ) == -)
{
printf("listen failed\n");
exit(-);
}
sinsize = sizeof(struct sockaddr);
if((clientfd = accept(sockfd, (struct sockaddr *)&clientaddr, &sinsize)) == -)
{
printf("accept failed\n");
exit(-);
}
else
printf("accept succeed\n");
pthread_create(&pid, NULL, (void*)recv_data,(void*)&clientfd);
while()
{
memset(buf, , );
gets(buf);
if(strncmp(buf, "quit", ) == )
{
close(clientfd);
close(sockfd);
return ;
}
send(clientfd, buf, strlen(buf), );
}
sleep(); close(clientfd);
close(sockfd); return ;
}
Socket编程:之双机通信的更多相关文章
- 【Socket编程】Java通信是这样炼成的
简介 网络无处不在,移动互联时代也早已到来,单机版程序慢慢的已没有生命力,所有的程序都要能够访问网络,比如 QQ 网络聊天程序.迅雷下载程序等,这些程序都要同网络打交道,本次将与各位小伙伴们分享的就是 ...
- java多线程实现TCP网络Socket编程(C/S通信)
目录 开篇必知必会 一.多线程技术 二.实现多线程接收 1.单线程版本 2.多线程版本 三.多线程与进程的关系 四.客户端界面完整代码 五.多线程通信对比 最后 开篇必知必会 在前一篇<Java ...
- C语言socket编程----实现UDP通信
TCP/IP协议叫做传输控制/网际协议,又叫做网络通信协议.实际上,它包括上百个功能的协议. 套接字(socket):在网络中用来描述计算机中不同程序与其他计算程序的通信方式. 套接字分为三类; 流式 ...
- C#版 Socket编程(最简单的Socket通信功能)
示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异 ...
- Java Socket编程----通信是这样炼成的
Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...
- 基于MFC的socket编程(异步非阻塞通信)
对于许多初学者来说,网络通信程序的开发,普遍的一个现象就是觉得难以入手.许多概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)等,初学者往往迷惑不清, ...
- Socket编程之聊天程序 - 模拟Fins/ModBus协议通信过程
设备控制软件编程涉及到的基本通信方式主要有TCP/IP与串口,用到的数据通信协议有Fins与ModBus. 更高级别的通信如.net中的Remoting与WCF在进行C/S架构软件开发时会采用. 本篇 ...
- JAVA Socket编程(二)之TCP通信
基于TCP(面向连接)的socket编程,分为客户端和服务器端. 客户端的流程如下: (1)创建套接字(socket) (2)向服务器发出连接请求(connect) (3)和服务器端进行通信(send ...
- 《java入门第一季》之Socket编程通信和TCP协议通信图解
Socket编程通信图解原理: TCP协议通信图解
- C#socket编程之实现一个简单的TCP通信
TCP(TransmissionControl Protocol)传输控制协议. 是一种可靠的.面向连接的协议(eg:打电话).传输效率低全双工通信(发送缓存&接收缓存).面向字节流.使用TC ...
随机推荐
- 【矩阵乘】【DP】【codevs 1305】Freda的道路
1305 Freda的道路 时间限制: 1 s 空间限制: 128000 KB 题目等级: 大师 Master 题目描写叙述 Description Freda要到Rainbow的城堡去玩了. 我们能 ...
- php获取网址
#测试网址: http://localhost/blog/testurl.php?id=5 //获取域名或主机地址 echo $_SERVER['HTTP_HOST']."<br> ...
- cocos2d-x3.0 XML解析
在2dx3.0中xml解析已经不用自己找库了.已经为我们集成好了. text.xml <?xml version ="1.0" encoding ="UTF8&qu ...
- 【Python】使用geopy由地址找经纬度等信息
代码: from geopy.geocoders import Nominatim geolocator = Nominatim() location = geolocator.geocode(&qu ...
- 入门GTD时间管理系统必读
让我们从什么时间管理开始.什么是时间管理呢?嗯,时间管理就是管理时间.可是,时间怎么能够管理呢? 其实我们管理地并不是时间,而是我们做的事.我们将事情分配到合适的时间段中,在有限的精力中完成它们,得到 ...
- android中去掉ListView控件中的分割线
通过设置android:divider="@null" ,可以去掉ListView控件中的分割线 也可以自定义分割线的颜色,比如: <ListView android:id= ...
- 【转】Ionic3在ts中获取html中值的方法
我觉得有两种方法,都是Angular中的语法,一种是把值当做参数传递,另一种是使用ngModel实现双向绑定 还有一种很少用到的,Js的原生方法:document.getElementById('ch ...
- MVC 之 缓存机制(一)
一.概述 缓存是将信息(数据或页面)放在内存中以避免频繁的数据库存储或执行整个页面的生命周期,直到缓存的信息过期或依赖变更才再次从数据库中读取数据或重新执行页面的生命周期.在系统优化过程中,缓存是比较 ...
- File /hbase could only be replicated to 0 nodes instead of minReplication (=1). There are 30 datanode(s) running and no node(s) are excluded in this operation.
原因: hdfs-site.xml中的配置为: <property> <name>dfs.datanode.du.reserved</name> <value ...
- Spring 开发环境搭建(二)
为了方面,直接使用eclipse,创建maven工程,创建成功之后 一.修改pom.xml,为了方面我就把Spring相关的jar包都引用了 <project xmlns="http: ...