该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

一下客户端:

#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编程求助。。相关推荐

  1. python3socket非阻塞在linux里无效_Linux下socket设置为非阻塞方式和fcntl系统调用

    用以下方法将socket设置为非阻塞方式 int flags = fcntl(socket, F_GETFL, 0); fcntl(socket, F_SETFL, flags | O_NONBLOC ...

  2. linux函数的阻塞与非阻塞IO及错误处理

    linux函数的阻塞与非阻塞IO及错误处理 1.阻塞是指进程等待某一个事件的发生而处于等待状态不往下执行,如果等待的事件发生了则会继续执行该进程.调用系统阻塞函数可能会导致进程阻塞进入睡眠状态. 2. ...

  3. linux非阻塞输入函数,Linux fcntl函数设置阻塞与非阻塞

    转自http://www.cnblogs.com/xuyh/p/3273082.html 用命令F_GETFL和F_SETFL设置文件标志,比如阻塞与非阻塞 F_SETFL     设置给arg描述符 ...

  4. linux 查看进程阻塞,linux进程 阻塞和非阻塞操作

    在我们看全功能的 read 和 write 方法的实现之前, 我们触及的最后一点是决定何时使 进程睡眠. 有时实现正确的 unix 语义要求一个操作不阻塞, 即便它不能完全地进行下去. 有时还有调用进 ...

  5. linux c 文件键盘写入,linux - C非阻塞键盘输入

    linux - C非阻塞键盘输入 我正在尝试用C语言编写一个程序(在Linux上)循环直到用户按下一个键,但不应该要求按键继续每个循环. 有一个简单的方法吗? 我想我可以用select()这样做,但这 ...

  6. Linux 设备驱动--- 阻塞型字符设备驱动 --- O_NONBLOCK --- 非阻塞标志【转】

    阅读目录 1,以阻塞方式运行: 2,以非阻塞方式运行: 转自:http://blog.csdn.net/yikai2009/article/details/8653697 版权声明:本文为博主原创文章 ...

  7. Linux网络编程 | IO模型 :阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路复用IO

    目录 IO模型 阻塞与非阻塞 同步与异步 阻塞IO 非阻塞IO 信号驱动IO 多路复用IO 异步IO IO模型 根据各自的特性不同,IO模型被分为阻塞IO.非阻塞IO.信号驱动IO.异步IO.多路复用 ...

  8. C++笔记之linux下非阻塞多线程运行多个系统shell命令(popen方法)

    参考博文:C++ linux 睡眠函数sleep和std::this_thread::sleep_for 参考博文:C++笔记之linux下运行系统shell命令(popen方法)函数封装 参考博文: ...

  9. linux下的阻塞和非阻塞

            读常规文件是不会阻塞的,不管读多少字节,read 一定会在有限的时间内返回.从终 端设备或网络读则不一定,如果从终端输入的数据没有换行符,调用 read 读终端设备就会 阻塞,如果网络 ...

  10. Linux下同步模式、异步模式、阻塞调用、非阻塞调用总结

    同步和异步:与消息的通知机制有关. 本质区别 现实例子 同步模式 由处理消息者自己去等待消息是否被触发 我去银行办理业务,选择排队等,排到头了就办理. 异步模式 由触发机制来通知处理消息者 我去银行办 ...

最新文章

  1. SpringBoot整合Grpc实现跨语言RPC通讯
  2. vue + axios---封装一个http请求
  3. C# CAD对象 构造时应把它的父对象也加进它的属性里
  4. cvMinMaxLoc函数实例
  5. 跨链(2)跨链技术“分布式私钥控制”
  6. SQL字符串处理--按分割符拆分字符串T-SQL to Split a varchar into Words
  7. java 子类中this,请问子类中的构造方法中 this(name,beijing,school);是啥意思
  8. 标准常有,VVC不常有
  9. 【kali】kali设置burpsuite抓包dvwa
  10. java线程池执行器_Java线程池ThreadPoolExecutor的使用
  11. jmeter 跨线程执行变量
  12. 想建出优质的社群,必须懂得社群的本质
  13. 如何聊离职原因,向面试官展示自己的忠诚
  14. linux日常笔记4
  15. MPEG4标准中的Advanced Simple Profile(ASP)完整的说明-01-02章
  16. 暴风影音怎么旋转视频?暴风影音旋转视频方法
  17. CMD控制台光标无法显示
  18. 从《大国崛起》(英国)看中国软件的发展
  19. 计算机主机不过电,电脑主板不通电的解决方法
  20. DeleteMapping GetMapping PutMapping

热门文章

  1. BRCM5.02编译四: ERROR: lzo/lzo1x.h development library is required for build
  2. 考前自学系列·计算机组成原理·控制器的组成及各部分的功能
  3. Arcgis API for JavaScript在地图上实现手机定位信息的追踪显示
  4. 中缀转后缀表达式并求值
  5. JSPatch近期新特性解析
  6. Eclipse上安装GIT插件EGit及使用
  7. Linux运维课程-Mysql之复制(2)
  8. Spring3MVC+Mybatis3.1框架下的事务
  9. Windows server 2012 活动目录回收站
  10. 实现SQL Server 2012 镜像