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 ...
随机推荐
- java中两种发起POST请求,并接收返回的响应内容的方式 (转)
http://xyz168000.blog.163.com/blog/static/21032308201162293625569/ 2.利用java自带的java.net.*包下提供的工具类 代码如 ...
- (转)【Unity Shaders】Vertex Magic —— 访问顶点颜色
转自:http://blog.csdn.net/candycat1992/article/details/38147767 本系列主要参考<Unity Shaders and Effects C ...
- 详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
转自:http://www.jb51.net/article/100111.htm 首先我们需要安装好Nginx.jdk.Tomcat,安装方法已经在 上一篇 说过了,本篇不再赘述. 下来看一下我们的 ...
- Eclipse导入git上的maven web项目 部署 - lpshou
http://www.tuicool.com/articles/fqm2Qf 推酷 文章 微博 主题 站点 活动 应用 周刊 登录 Eclipse导入git上的maven web项目 部署 - ...
- PDF文档输出
参考:http://ajava.org/article-685-1.html Flexpaper> 参数说明: Flexpaper参数说明SwfFile (String) 需要使用Flexpap ...
- UiTextField 限制输入长度
-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementS ...
- Active Directoty域服务安装
运行dcpromo命令,打开“Active Directoty域服务安装向导”
- 详解JAVA输出Hello World
想必大家对这一段JAVA代码一定不会陌生: public class Test { public static void main(String[] args) { System.out.printl ...
- sublime text 3中文乱码问题解决的方法
一.首先要确保本机sublime已经有安装包管理器,假设没有.安装方法:http://blog.chinaunix.net/uid-12014716-id-4269991.html 文中的第一步:安装 ...
- 算法笔记_223:打印回型嵌套(Java)
目录 1 问题描述 2 解决方案 1 问题描述 *********** * * * ******* * * * * * * * *** * * * * * * * * * * *** * * * ...