linux中select网络通信
//ser.cpp
#include <iostream>
#include <fcntl.h>
#include <sys/socket.h>
#include <sys/select.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
#define IP "127.0.0.1"
#define PORT 8888
using namespace std;
int main()
{
int sockSer,sockCli;
sockaddr_in addrSer,addrCli;
sockSer = socket(AF_INET,SOCK_STREAM,0);
bzero(&addrSer,sizeof(addrSer));
bzero(&addrCli,sizeof(addrSer));
addrSer.sin_family = AF_INET;
addrSer.sin_port = htons(PORT);
addrSer.sin_addr.s_addr = inet_addr(IP);
socklen_t len = sizeof(sockaddr_in);
bind(sockSer,(sockaddr*)&addrSer,len);
listen(sockSer,5);
char clibuff[255];
memset(clibuff,0,sizeof(clibuff));
//////////////////////////////////////////////////////
fd_set Read;
fd_set Write;
static int maxfd = 0;
int sock_set[100];//socket set.
int size = 1;//index
sockCli = accept(sockSer,(sockaddr*)&addrCli,&len);
if(sockCli<0)
{
cout<<sockCli<<endl;
cout<<"accept() error!!!!"<<endl;
close(sockSer);
close(sockCli);
return -1;
}
struct timeval _timeout={3,0};
off_t fd = open("a",O_CREAT|O_RDWR);
while(1)
{
FD_ZERO(&Read);
FD_SET(sockCli,&Read);
FD_ZERO(&Write);
FD_SET(fd,&Write);
maxfd = maxfd>sockCli?
maxfd:sockCli;
maxfd = maxfd>fd?maxfd:fd;
select(maxfd+1,&Read,&Write,NULL,&_timeout);
if(FD_ISSET(sockCli,&Read))
{
if(fork()==0)
{
cout<<"return"<<endl;
char buff[255];
memset(buff,0,sizeof(buff));
while(1){
read(sockCli,buff,sizeof(buff));
cout<<buff<<endl;
char str[]="xiaoyanzi";
write(sockCli,str,strlen(str)+1);
}
}
}
if(FD_ISSET(fd,&Write))
{
write(fd,"1234",5);
sleep(1);
}
}
return 0;
}
#include <iostream>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#define IP "127.0.0.1"
#define PORT 8888
using namespace std;
int main()
{
int sockCli = socket(AF_INET,SOCK_STREAM,0);
sockaddr_in addrSer;
bzero(&(addrSer),sizeof(addrSer));
addrSer.sin_family = AF_INET;
addrSer.sin_port = htons(PORT);
addrSer.sin_addr.s_addr = inet_addr(IP);
socklen_t len = sizeof(sockaddr_in);
int Ret = connect(sockCli,(sockaddr*)&addrSer,len);
if(Ret != 0)
{
close(sockCli);
return -1;
}
char serbuff[]="liuhuiyan";
char clibuff[255];
while(1)
{
write(sockCli,serbuff,strlen(serbuff)+1);
read(sockCli,clibuff,sizeof(clibuff));
cout<<clibuff<<endl;
sleep(1);
}
return 0;
}
//Makefile
SER=ser
CLI=cli
CC=g++
Status=-g
all:$(CLI) $(SER)
.PHONY:all
$(SER):$(SER).cpp
@$(CC) -o $@ $^ $(Status)
$(CLI):$(CLI).cpp
@$(CC) -o $@ $^ $(Status)
.PHONY:clean
clean:
rm -rf *.o $(SER) $(CLI)
linux中select网络通信的更多相关文章
- Linux中select poll和epoll的区别
在Linux Socket服务器短编程时,为了处理大量客户的连接请求,需要使用非阻塞I/O和复用,select.poll和epoll是Linux API提供的I/O复用方式,自从Linux 2.6中加 ...
- 转:linux中select()函数分析
源地址:http://blog.csdn.net/zi_jin/article/details/4214359 Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱 ...
- linux中的网络通信指令 分类: 学习笔记 linux ubuntu 2015-07-06 16:02 134人阅读 评论(0) 收藏
1.write write命令通信是一对一的通信,即两个人之间的通信,如上图. 效果图 用法:write <用户名> 2.wall wall指令可将信息发送给每位同意接收公众信息的终端机用 ...
- linux中的网络通信指令
1.write write命令通信是一对一的通信,即两个人之间的通信,如上图. 效果图 用法:write <用户名> 2.wall wall指令可将信息发送给每位同意接收公众信息的终端机用 ...
- 如何在Linux中搭建禅道8.4.1(httpd+php+mysql)
1.安装httpd 命令:yum install httpd 然后一路y即可 2.安装php 命令:yum install php 3.安装php-mysql 命令:yum install php ...
- 【转】windows和linux中搭建python集成开发环境IDE
本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...
- Linux下select&poll&epoll的实现原理(一)
最近简单看了一把 linux-3.10.25 kernel中select/poll/epoll这个几个IO事件检测API的实现.此处做一些记录.其基本的原理是相同的,流程如下 先依次调用fd对应的st ...
- Windows转到linux中,文件乱码,文件编码转换 & 解决sqlplus连接oracle乱码
转载:http://www.cnblogs.com/wanyao/p/3399269.html 最近,学习又重新开始Linux学习,所以一直在Centos中,昨天一朋友把他在Windows下写的C程序 ...
- 聊聊 Linux 中的五种 IO 模型
本文转载自: http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666538919&idx=1&sn=6013c451 ...
随机推荐
- jmeter压力测试入门
http://www.51testing.com/html/80/n-853680.html http://blog.csdn.net/vincy_zhao/article/details/70238 ...
- 关于面试总结-linux篇
前言 现在做测试的出去面试,都会被问到linux,不会几个linux指令都不好意思说自己是做测试的了,本篇收集了几个被问的频率较高的linux面试题 常用指令 1.说出10个linux常用的指令 ls ...
- 大数据学习——hbase数据库
Hhbase集群搭建 一 第一步 准备:搭建hadoop集群,搭建zookeeper 二 第二步:上传安装包 解压 1 tar -zxvf hbase-1.2.1-bin.tar.gz 重命名 2 ...
- C++中的临时变量
临时变量有两个特征: 1.invisiable,在程序代码中没有显式出现 2 没有名字 non - named. 出现临时变量/对象的场合1.函数的返回值2. 参数传递 值传递 by - value ...
- 性能测试之五--webservices接口测试
下面我们进行webservices接口的讲解,包括脚本生成,参数化和关联. 以天气预报的接口为例,接口地址为: http://ws.webxml.com.cn/WebServices/WeatherW ...
- BZOJ 1027 [JSOI2007]合金 ——计算几何
我们可以把每一种金属拆成一个二维向量,显然第三维可以计算出来,是无关的. 我们只需要考虑前两维的情况,显然可以构成点集所形成的凸包内. 然后我们枚举两两的情况,然后可以发现如果所有的点都在一侧是可以选 ...
- OS X 下iso刻录U盘(系统安装启动盘)
1. 查看盘 $diskutil list /dev/disk0 #: TYPE NAME SIZE IDENTIFIER : GUID_partition_scheme *320.1 GB disk ...
- 【DFS求树的最大二分匹配+输入外挂】HDU 6178 Monkeys
http://acm.hdu.edu.cn/showproblem.php?pid=6178 [题意] 给定一棵有n个结点的树,现在有k个猴子分布在k个结点上,我们可以删去树上的一些边,使得k个猴子每 ...
- 转载:hmm学习网站
http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5
- Office 中的各种小tips(更新中)
1.Word 中打字输入会擦掉之后原有字符,出现“吃字”的情况? 要将“改写”切换为“插入”,最简单的方法就是点击键盘上小键盘旁边的“insert”键. 其实仔细观察的话,在word文档下方,会看到如 ...