//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网络通信的更多相关文章

  1. Linux中select poll和epoll的区别

    在Linux Socket服务器短编程时,为了处理大量客户的连接请求,需要使用非阻塞I/O和复用,select.poll和epoll是Linux API提供的I/O复用方式,自从Linux 2.6中加 ...

  2. 转:linux中select()函数分析

    源地址:http://blog.csdn.net/zi_jin/article/details/4214359 Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱 ...

  3. linux中的网络通信指令 分类: 学习笔记 linux ubuntu 2015-07-06 16:02 134人阅读 评论(0) 收藏

    1.write write命令通信是一对一的通信,即两个人之间的通信,如上图. 效果图 用法:write <用户名> 2.wall wall指令可将信息发送给每位同意接收公众信息的终端机用 ...

  4. linux中的网络通信指令

    1.write write命令通信是一对一的通信,即两个人之间的通信,如上图. 效果图 用法:write <用户名> 2.wall wall指令可将信息发送给每位同意接收公众信息的终端机用 ...

  5. 如何在Linux中搭建禅道8.4.1(httpd+php+mysql)

    1.安装httpd 命令:yum install httpd 然后一路y即可 2.安装php 命令:yum install php   3.安装php-mysql 命令:yum install php ...

  6. 【转】windows和linux中搭建python集成开发环境IDE

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  7. Linux下select&poll&epoll的实现原理(一)

    最近简单看了一把 linux-3.10.25 kernel中select/poll/epoll这个几个IO事件检测API的实现.此处做一些记录.其基本的原理是相同的,流程如下 先依次调用fd对应的st ...

  8. Windows转到linux中,文件乱码,文件编码转换 & 解决sqlplus连接oracle乱码

    转载:http://www.cnblogs.com/wanyao/p/3399269.html 最近,学习又重新开始Linux学习,所以一直在Centos中,昨天一朋友把他在Windows下写的C程序 ...

  9. 聊聊 Linux 中的五种 IO 模型

    本文转载自: http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666538919&idx=1&sn=6013c451 ...

随机推荐

  1. Java-在一个包装器对象中包装一个原始类型

    使用基本类型的包装对象,好处可以为空且可以序列化 package com.tj; public class MyClass2 { public static void main(String[] ar ...

  2. 关于Relay Log无法自动删除的问题

    本文介绍了一次运维实践中relay-log长期无法自动删除的原因和解决过程 背景: 今天在运维一个mysql实例时,发现其数据目录下的relay-log 长期没有删除,已经堆积了几十个relay-lo ...

  3. [LoadRunner]LR性能测试结果样例分析

    R性能测试结果样例分析 测试结果分析 LoadRunner性能测试结果分析是个复杂的过程,通常可以从结果摘要.并发数.平均事务响应时间.每秒点击数.业务成功率.系统资源.网页细分图.Web服务器资源. ...

  4. hdu2043

    #include <stdio.h> #include <string.h> char sign[]={'A','B','C','D','E','F','G','H','I', ...

  5. POJ-2078 Matrix,暴力枚举!

                                                                 Matrix 题意:一个n*n的数字矩阵,每次操作可以对任意一行或者一列进行循 ...

  6. UIAlertView+Blocks.h

    #import <Foundation/Foundation.h> typedef void (^DismissBlock)(int buttonIndex); typedef void ...

  7. Codeforces Round #354 (Div. 2)——C. Vasya and String(尺取)

    C. Vasya and String time limit per test 1 second memory limit per test 256 megabytes input standard ...

  8. HDU——2612Find a way(多起点多终点BFS)

    Find a way Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. SPOJ GSS1 Can you answer these queries I ——线段树

    [题目分析] 线段树裸题. 注意update的操作,写结构体里好方便. 嗯,没了. [代码] #include <cstdio> #include <cstring> #inc ...

  10. Wing IDE 6.0 算号器注册机代码

    我开发Python时喜欢用Wing IDE, 然后最近发现Wing IDE升级到6.0版本了, 但是之前能在5.1上用的算号器代码不能用在6.0上了, 所以就上网搜搜是否有相关算号器, 果然, 找到了 ...