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 ...
随机推荐
- kendo Grid 列添加自定义模板
columns: [ {field: "行为",template: "<a href='#= 行为#'>#= 行为#</a>"}, {f ...
- 【JavaScript 10—应用总结】:连缀
一.总体概述 1.1,什么叫连缀 所谓连缀,最简单的理解就是一句话同时设置一个或多个节点两个或两个以上的操作.比如: <span style="font-size:18px;" ...
- NOJ——1628Alex’s Game(III)(DFS+回溯)
[1628] Alex’s Game(III) 时间限制: 1000 ms 内存限制: 65535 K 问题描述 Alex likes to play with one and zero as you ...
- LightOJ——1066Gathering Food(BFS)
1066 - Gathering Food PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB W ...
- sqlite-jdbc
sqlite-jdbc驱动下载 https://bitbucket.org/xerial/sqlite-jdbc/downloads import java.sql.*; public class T ...
- 【双向bfs】2017多校训练十 HDU 6171 Admiral
[题意] 现在给出一个三角矩阵,如果0编号的在点(x,y)的话,可以和(x+1,y),(x-1,y),(x+1,y+1),(x-1,y-1)这些点进行交换. 我们每一次只能对0点和其他点进行交换.问最 ...
- Nova 组件详解
本节开始,我们将详细讲解 Nova 的各个子服务. 前面架构概览一节知道 Nova 有若干 nova-* 的子服务,下面我们将依次学习最重要的几个.今天先讨论 nova-api 和 nova-cond ...
- 洛谷P3143 [USACO16OPEN]钻石收藏家Diamond Collector
题目描述 Bessie the cow, always a fan of shiny objects, has taken up a hobby of mining diamonds in her s ...
- JavaScript 数组操作函数--转载+格式整理
JavaScript 数组操作函数(部分)--转载+格式整理 今天看了一篇文章,主要讲的对常用的Js操作函数:push,pop,join,shift,unshift,slice,splice,conc ...
- hdu 4430 Yukari's Birthday 枚举+二分
注意会超long long 开i次根号方法,te=(ll)pow(n,1.0/i); Yukari's Birthday Time Limit: 12000/6000 MS (Java/Others) ...