linux 非阻塞 socket,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);
}
}
}
linux 非阻塞 socket,linux 非阻塞式socket编程求助。。相关推荐
- python3socket非阻塞在linux里无效_Linux下socket设置为非阻塞方式和fcntl系统调用
用以下方法将socket设置为非阻塞方式 int flags = fcntl(socket, F_GETFL, 0); fcntl(socket, F_SETFL, flags | O_NONBLOC ...
- Linux下Socket通信中非阻塞connect、select、recv 和 recvfrom、send和sendto大致讲解,附带非租塞connect代码、MSG_NOSIGNAL
linux中send函数MSG_NOSIGNAL异常消息 在服务器端用ctrl+c 来结束服务器接收进程来模拟服务器宕机的情况,结束服务 socket 进程之后,服务端自然关闭进程,可是 client ...
- linux socket write()函数阻塞卡住线程问题(线程无法结束)write()非阻塞代码
文章目录 1.参考文章:C++网络通信中write和read的为什么会阻塞 [2.参考文章:网络编程(24)-- linux中write和read函数的阻塞试验](https://blog.csdn. ...
- Linux IO - 同步,异步,阻塞,非阻塞
From:http://blog.csdn.net/historyasamirror/article/details/5778378 同步/异步,阻塞/非阻塞概念深度解析:http://blog.cs ...
- linux非阻塞输入函数,Linux fcntl函数设置阻塞与非阻塞
转自http://www.cnblogs.com/xuyh/p/3273082.html 用命令F_GETFL和F_SETFL设置文件标志,比如阻塞与非阻塞 F_SETFL 设置给arg描述符 ...
- Linux网络编程 | IO模型 :阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路复用IO
目录 IO模型 阻塞与非阻塞 同步与异步 阻塞IO 非阻塞IO 信号驱动IO 多路复用IO 异步IO IO模型 根据各自的特性不同,IO模型被分为阻塞IO.非阻塞IO.信号驱动IO.异步IO.多路复用 ...
- Socket 实现非阻塞式多线程文件传输(jpg mov 等各种格式)
Socket 基础 非阻塞式TCP socket 实现文件传输, 实测 传输5M的jpg , 30M的 NEF(单反原图) 以及 1G以上的mov文件,均正常接收 客户端可多开,服务器多线程实现服务器 ...
- Socket 基础 非阻塞式TCP socket,实现文件传输jpg,mov等格式
Socket 基础 非阻塞式TCP socket 实现文件传输, 实测 传输5M的jpg , 30M的 NEF(单反原图) 以及 1G以上的mov文件,均正常接收 客户端可多开,服务器多线程实现服务器 ...
- 详解Linux驱动技术(五) _设备阻塞/非阻塞读写
在Linux驱动程序编写过程中,设备阻塞/非阻塞读写是一种非常重要的技术.它可以实现高效的数据传输和事件处理,提高系统的性能和响应速度.在本文中,我们将深入探讨Linux驱动技术(五) _设备阻塞/非 ...
- Linux下同步模式、异步模式、阻塞调用、非阻塞调用总结
同步和异步:与消息的通知机制有关. 本质区别 现实例子 同步模式 由处理消息者自己去等待消息是否被触发 我去银行办理业务,选择排队等,排到头了就办理. 异步模式 由触发机制来通知处理消息者 我去银行办 ...
最新文章
- ARM指令集 VS Thumb指令集
- CosmoMC第一次测试
- J.U.C atomic 数组,字段原子操作
- java中删除node节点_[Java]LeetCode237. 删除链表中的节点 | Delete Node in a Linked List
- android关键应用程序,安卓开发:Android应用程序的四个关键点
- jsf集成spring_Spring和JSF集成:国际化和本地化
- 利用GDB进行远程调试
- box2d 计算下一帧的位置/角度
- Redis基本操作练习
- 【前端】书签应用开发总结
- xshell中进入PLSQL命令不能使用方向键和退格键的做法(输入后显示乱码)
- 离散数学及其应用傅彦pdf_离散数学及其应用 傅彦 等 高等教育出版社
- system.gc()和-XX:+DisableExplicitGC启动参数,以及DirectByteBuffer的内存释放
- Dell 服务器阵列扩容【经验分享(转)】
- 处理:‘IplImage’ does not name a type; did you mean ‘image’?
- 历史上水平最高的三十首七律
- 如何删除电脑计算机用户账户,怎么删除电脑账户密码 如何删除电脑开机账户密码...
- 校招——2021多益网络软件开发笔试和面试
- MINIUI基本学习笔记
- NVIDIA vGPU vApps/vWS/vCS适配GPU版本介绍