linux中select网络通信
2024-10-22 08:37:54
//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)
最新文章
- python类中super()和__init__()的区别
- python时间时分秒与秒数的互相转换
- Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例
- Composite模式
- paip.点击每个网页链接都提示下载的解决。
- Alice and Bob
- iOS 应用性能测试的相关方法、工具及技巧
- HDU ACM 1098 Ignatius&;#39;s puzzle
- Cocos2d-x 多分辨率适配完全解析
- 一、Snapman多人协作电子表格之——Snapman自我介绍
- Windbg程序调试系列4-Live Debugging
- Java核心技术及面试指南 线性表方面的面试题总结以及答案
- Nginx记录-Nginx基础(转载)
- 项目实战安装工具箱Busybox
- KM算法及其应用
- python基础之字符串以及切片等操作
- C++快速开发样本工程的建立--编写常用组件
- XVAG音频文件格式提取
- I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA 问题
- iptables 安全
热门文章
- grunt---grunt_test 测试用例
- IOS 自动布局-UIStackPanel和UIGridPanel(三)
- 【死磕 Spring】
- CSAPP学习笔记—虚拟内存
- Charlie&#39;s Change(完全背包记录路径)
- 2011 Michigan Invitational Programming Contest
- 在LoadRunner中执行命令行程序之:popen()取代system()
- 【Luogu】P2704炮兵阵地(状压DP)
- 写给新员工的十点SQL开发建议
- BZOJ 3850: ZCC Loves Codefires【贪心】