服务端:

 #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编程:之双机通信的更多相关文章

  1. 【Socket编程】Java通信是这样炼成的

    简介 网络无处不在,移动互联时代也早已到来,单机版程序慢慢的已没有生命力,所有的程序都要能够访问网络,比如 QQ 网络聊天程序.迅雷下载程序等,这些程序都要同网络打交道,本次将与各位小伙伴们分享的就是 ...

  2. java多线程实现TCP网络Socket编程(C/S通信)

    目录 开篇必知必会 一.多线程技术 二.实现多线程接收 1.单线程版本 2.多线程版本 三.多线程与进程的关系 四.客户端界面完整代码 五.多线程通信对比 最后 开篇必知必会 在前一篇<Java ...

  3. C语言socket编程----实现UDP通信

    TCP/IP协议叫做传输控制/网际协议,又叫做网络通信协议.实际上,它包括上百个功能的协议. 套接字(socket):在网络中用来描述计算机中不同程序与其他计算程序的通信方式. 套接字分为三类; 流式 ...

  4. C#版 Socket编程(最简单的Socket通信功能)

    示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异 ...

  5. Java Socket编程----通信是这样炼成的

    Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...

  6. 基于MFC的socket编程(异步非阻塞通信)

       对于许多初学者来说,网络通信程序的开发,普遍的一个现象就是觉得难以入手.许多概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)等,初学者往往迷惑不清, ...

  7. Socket编程之聊天程序 - 模拟Fins/ModBus协议通信过程

    设备控制软件编程涉及到的基本通信方式主要有TCP/IP与串口,用到的数据通信协议有Fins与ModBus. 更高级别的通信如.net中的Remoting与WCF在进行C/S架构软件开发时会采用. 本篇 ...

  8. JAVA Socket编程(二)之TCP通信

    基于TCP(面向连接)的socket编程,分为客户端和服务器端. 客户端的流程如下: (1)创建套接字(socket) (2)向服务器发出连接请求(connect) (3)和服务器端进行通信(send ...

  9. 《java入门第一季》之Socket编程通信和TCP协议通信图解

    Socket编程通信图解原理: TCP协议通信图解

  10. C#socket编程之实现一个简单的TCP通信

    TCP(TransmissionControl Protocol)传输控制协议. 是一种可靠的.面向连接的协议(eg:打电话).传输效率低全双工通信(发送缓存&接收缓存).面向字节流.使用TC ...

随机推荐

  1. 【转】vim中多标签和多窗口的使用

    原文:https://my.oschina.net/kutengshe/blog/464602 ---------------------------------------------------- ...

  2. 将iPhone投影到Mac上

    将iPhone投影到Mac上 有时候, 出于演示须要, 又或者嫌弃iPhone屏幕太小了, 我想把画面弄到mac上. 这时候, 就须要将iPhone投影到Mac上. 至于怎样做呢? 这就是本文要说明的 ...

  3. Maven hive-jdbc教程

    由于项目中需要用到hive-jdbc从数据仓库拉数据下来,所以简单的学一下hive,hive数据仓库建构在hadoop集群之上,数据存在hdfs文件系统中,hive中执行的操作会装换成mapreduc ...

  4. OAuth2 Demo PHP

    OAuth2 Demo PHP 此应用程序的目的是演示OAuth2.0客户端和服务器之间的工作流.如果这是你第一次来这里,试图尝试的现场演示让OAuth2.0流更好的感觉. experimenting ...

  5. Redis 实现队列http://igeekbar.com/igeekbar/post/436.htm

    场景说明: ·用于处理比较耗时的请求,例如批量发送邮件,如果直接在网页触发执行发送,程序会出现超时 ·高并发场景,当某个时刻请求瞬间增加时,可以把请求写入到队列,后台在去处理这些请求 ·抢购场景,先入 ...

  6. 解析Linux操作系统文件目录

    解析Linux操作系统文件目录 随着Linux的不断发展,越来越多的人开始使用Linux,对于那些刚刚接触的人来说,恐怕最先感到困惑的就是那些“不明不白”的目录了.如果想熟练使用Linux,让Linu ...

  7. WIN10系统 截图或者某些程序时屏幕会自动放大怎么办

    右击这个应用程序,兼容性,以兼容模式运行,同时勾选高DPI设置时禁止显示缩放即可

  8. Discuz常见小问题-如何取消帖子置顶

    定位到一个帖子,然后顶部会有置顶的选项,还是勾选置顶,后面下拉列表选择无,然后点击确定,提示解除置顶  

  9. hdu 1728 逃离迷宫 bfs记转向

    题链:http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Mem ...

  10. javascript64位加密

    var base64 = new Object(); base64.settings = { char: "+/", pad: "=", ascii: fals ...