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 ...
 
随机推荐
- Centos6.5搭建git远程仓库
			
远程仓库搭建 step1:安装git ```yum -y install git``` step2:创建用户git,用来运行git服务 useradd git passwd git //修改git用户 ...
 - dp的两个不错的题
			
C - Cheapest Palindrome Keeping track of all the cows can be a tricky task so Farmer John has instal ...
 - sqlserver查询表大小
			
IF OBJECT_ID('tempdb..#TB_TEMP_SPACE') IS NOT NULL DROP TABLE #TB_TEMP_SPACE GO CREATE TABLE #TB_TEM ...
 - [LA3620]Manhattan Wiring
			
[LA3620]Manhattan Wiring 试题描述 输入 输出 输入示例 输出示例 数据规模及约定 见“输入” 题解 我们把“连线”的过程改为“铺地砖”的过程,总共有 11 种地砖,每种地砖上 ...
 - [BZOJ2342] [Shoi2011]双倍回文(manacher)
			
传送门 manacher...... 先跑一边manacher是必须的 然后枚举双倍回文串的对称轴x 把这个双倍回文串分成4段,w wR w wR 发现,只有当 y <= x + p[x] / ...
 - linux虚拟机无法上网 Network is unreachable
			
系统centos 安装ftp时报错 Couldn't resolve host 'mirrorlist.centos.org [root@wulihua bin]# yum install vsft ...
 - 通过Idea进行Kubernetes YAML开发
			
即将推出的IntelliJ IDEA 2018.1 Ultimate Edition通过全新的Kubernetes插件为Kubernetes引入了初步支持.新插件支持从v1.5到最近发布的v1.9 的 ...
 - uva 10870 递推关系矩阵快速幂模
			
Recurrences Input: standard input Output: standard output Consider recurrent functions of the follow ...
 - android soap webservers 无法执行 报错 ht.call(SOAP_ACTION, envelope);解决方法
			
1.可能没有加入网络访问权限,在Manifest里面加入,<uses-permission android:name="android.permission.INTERNET" ...
 - 如何使用ftrace
			
基本使用 1. 编译内核 ref:http://www.omappedia.org/wiki/Installing_and_Using_Ftrace========================== ...