socket 非阻塞 linux,linux 非阻塞式socket编程求助。。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一下客户端:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAXDATASIZE 256
#define SERVPORT 4444
#define STDIN 0
int main(void){
int sockfd;
int recvbytes;
char buf[MAXDATASIZE];
char *str;
char name[MAXDATASIZE];
char send_str[MAXDATASIZE];
struct sockaddr_in serv_addr;
fd_set rfd_set,wfd_set,efd_set;
struct timeval timeout;
int ret;
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
perror("socket");
exit(1);
}
bzero(&serv_addr,sizeof(struct sockaddr_in));
serv_addr.sin_family =AF_INET;
serv_addr.sin_port=htons(SERVPORT);
inet_aton("127.0.0.1",&serv_addr.sin_addr);
/* serv_addr.sin_addr.s_addr=inet_addr("192.168.1.107");*/
if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1)
{
perror("connect");
exit(1);
}
fcntl(sockfd,F_SETFD,O_NONBLOCK);
printf("要聊天首先输入你的名字:");
scanf("%s",name);
name[strlen(name)]='\0';
printf("%s:",name);
fflush(stdout);
send(sockfd,name,strlen(name),0);
while(1){
FD_ZERO(&rfd_set);
FD_ZERO(&wfd_set);
FD_ZERO(&efd_set);
FD_SET(STDIN,&rfd_set);
FD_SET(sockfd,&rfd_set);
FD_SET(sockfd,&wfd_set);
FD_SET(sockfd,&efd_set);
timeout.tv_sec =5;
timeout.tv_usec =0;
ret =select(sockfd+1,&rfd_set,&wfd_set,&efd_set,&timeout);
if(ret ==0){
continue;
}
if(ret<0){
perror("select error:");
exit(-1);
}
if(FD_ISSET(STDIN,&rfd_set)){
fgets(send_str,256,stdin);
send_str[strlen(send_str)-1]='\0';
if(strncmp("quit",send_str,4)==0);
{
close(sockfd);
exit(0);
}
send(sockfd,send_str,strlen(send_str),0);
}
if(FD_ISSET(sockfd,&rfd_set))
{
recvbytes=recv(sockfd,buf,MAXDATASIZE,0);
if(recvbytes==0)
{
close(sockfd);
exit(0);
}
buf[recvbytes]='\0';
printf("Server:%s\n",buf);
printf("%s:",name);
fflush(stdout);
}
if(FD_ISSET(sockfd,&efd_set))
{
close(sockfd);
exit(0);
}
}
}
socket 非阻塞 linux,linux 非阻塞式socket编程求助。。相关推荐
- python3socket非阻塞在linux里无效_Linux下socket设置为非阻塞方式和fcntl系统调用
用以下方法将socket设置为非阻塞方式 int flags = fcntl(socket, F_GETFL, 0); fcntl(socket, F_SETFL, flags | O_NONBLOC ...
- linux函数的阻塞与非阻塞IO及错误处理
linux函数的阻塞与非阻塞IO及错误处理 1.阻塞是指进程等待某一个事件的发生而处于等待状态不往下执行,如果等待的事件发生了则会继续执行该进程.调用系统阻塞函数可能会导致进程阻塞进入睡眠状态. 2. ...
- linux非阻塞输入函数,Linux fcntl函数设置阻塞与非阻塞
转自http://www.cnblogs.com/xuyh/p/3273082.html 用命令F_GETFL和F_SETFL设置文件标志,比如阻塞与非阻塞 F_SETFL 设置给arg描述符 ...
- linux 查看进程阻塞,linux进程 阻塞和非阻塞操作
在我们看全功能的 read 和 write 方法的实现之前, 我们触及的最后一点是决定何时使 进程睡眠. 有时实现正确的 unix 语义要求一个操作不阻塞, 即便它不能完全地进行下去. 有时还有调用进 ...
- linux c 文件键盘写入,linux - C非阻塞键盘输入
linux - C非阻塞键盘输入 我正在尝试用C语言编写一个程序(在Linux上)循环直到用户按下一个键,但不应该要求按键继续每个循环. 有一个简单的方法吗? 我想我可以用select()这样做,但这 ...
- Linux 设备驱动--- 阻塞型字符设备驱动 --- O_NONBLOCK --- 非阻塞标志【转】
阅读目录 1,以阻塞方式运行: 2,以非阻塞方式运行: 转自:http://blog.csdn.net/yikai2009/article/details/8653697 版权声明:本文为博主原创文章 ...
- Linux网络编程 | IO模型 :阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路复用IO
目录 IO模型 阻塞与非阻塞 同步与异步 阻塞IO 非阻塞IO 信号驱动IO 多路复用IO 异步IO IO模型 根据各自的特性不同,IO模型被分为阻塞IO.非阻塞IO.信号驱动IO.异步IO.多路复用 ...
- C++笔记之linux下非阻塞多线程运行多个系统shell命令(popen方法)
参考博文:C++ linux 睡眠函数sleep和std::this_thread::sleep_for 参考博文:C++笔记之linux下运行系统shell命令(popen方法)函数封装 参考博文: ...
- linux下的阻塞和非阻塞
读常规文件是不会阻塞的,不管读多少字节,read 一定会在有限的时间内返回.从终 端设备或网络读则不一定,如果从终端输入的数据没有换行符,调用 read 读终端设备就会 阻塞,如果网络 ...
- Linux下同步模式、异步模式、阻塞调用、非阻塞调用总结
同步和异步:与消息的通知机制有关. 本质区别 现实例子 同步模式 由处理消息者自己去等待消息是否被触发 我去银行办理业务,选择排队等,排到头了就办理. 异步模式 由触发机制来通知处理消息者 我去银行办 ...
最新文章
- SpringBoot整合Grpc实现跨语言RPC通讯
- vue + axios---封装一个http请求
- C# CAD对象 构造时应把它的父对象也加进它的属性里
- cvMinMaxLoc函数实例
- 跨链(2)跨链技术“分布式私钥控制”
- SQL字符串处理--按分割符拆分字符串T-SQL to Split a varchar into Words
- java 子类中this,请问子类中的构造方法中 this(name,beijing,school);是啥意思
- 标准常有,VVC不常有
- 【kali】kali设置burpsuite抓包dvwa
- java线程池执行器_Java线程池ThreadPoolExecutor的使用
- jmeter 跨线程执行变量
- 想建出优质的社群,必须懂得社群的本质
- 如何聊离职原因,向面试官展示自己的忠诚
- linux日常笔记4
- MPEG4标准中的Advanced Simple Profile(ASP)完整的说明-01-02章
- 暴风影音怎么旋转视频?暴风影音旋转视频方法
- CMD控制台光标无法显示
- 从《大国崛起》(英国)看中国软件的发展
- 计算机主机不过电,电脑主板不通电的解决方法
- DeleteMapping GetMapping PutMapping
热门文章
- BRCM5.02编译四: ERROR: lzo/lzo1x.h development library is required for build
- 考前自学系列·计算机组成原理·控制器的组成及各部分的功能
- Arcgis API for JavaScript在地图上实现手机定位信息的追踪显示
- 中缀转后缀表达式并求值
- JSPatch近期新特性解析
- Eclipse上安装GIT插件EGit及使用
- Linux运维课程-Mysql之复制(2)
- Spring3MVC+Mybatis3.1框架下的事务
- Windows server 2012 活动目录回收站
- 实现SQL Server 2012 镜像