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 ...
随机推荐
- Linux Kernel 2:用户空间的初始化
上篇我们知道,kernel初始化后将启动init进程,那么这个进程将干些什么呢?除此之外,kernel还需要做些什么事情呢?(想想文件系统.根存储设备是在什么时候初始化的呢?) 先从文件系统初始化说起 ...
- OpenGL ES3 非常好的系列文章
OpenGL ES3 非常好的系列文章: OpenGL-ES 3.0学习指南(五)--EGL基础 NDK开发OpenGL ES 3.0(二)--初见GLES,第一个三角形 NDK开发OpenGL ES ...
- 调试工具DebugView
可以用来跟踪如下函数的输出: Win32 OutputDebugString Kernel-mode DbgPrint All kernel-mode variants of DbgPrint i ...
- windows vs2017环境下编译webkit 2
WebKit在Windows上 内容 安装开发工具 设置Git存储库 设置支持工具 构建WebKit 安装Cygwin(可选) 得到一个崩溃日志 本指南提供了用于构建WebKit的指令在Windows ...
- Android自己定义View之仪表盘
新建项目,新建DashBoardView继承自View实现OnGlobalLayoutListener接口,并重写OnDraw方法. 使用OnGlobalLayoutListener接口须要重写onG ...
- 自己定义View Layout过程 - 最易懂的自己定义View原理系列(3)
前言 自己定义View是Android开发人员必须了解的基础 网上有大量关于自己定义View原理的文章.但存在一些问题:内容不全.思路不清晰.无源代码分析.简单问题复杂化等等 今天,我将全面总结自己定 ...
- Install SVN (Subversion) Server on Fedora 20/19, CentOS/Red Hat (RHEL) 6.5/5.10
Install SVN (Subversion) Server on Fedora 20/19, CentOS/Red Hat (RHEL) 6.5/5.10 Updated by JR on Mar ...
- TFS 之 彻底删除团队项目
方式一 通过选择“齿轮图标”打开团队项目集合的管理上下文. 打开要删除的团队项目的 上下文菜单. 如果未看到上下文图标 (),则你不是在访问 Visual Studio Online,或不是项目集合管 ...
- Spring-boot JMS 发送消息慢的问题解决
1:在<ActiveMQ 基于zookeeper的主从(levelDB Master/Slave)搭建以及Spring-boot下使用>(http://www.cnblogs.com/ys ...
- tempermonkey相关
@match不支持参数和端口配置,瞬间软了