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);

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 环境变量配置

From&#xff1a;https://www.linuxidc.com/Linux/2015-08/121192.htm .bash_profile和.bashrc的区别(如何设置生效)&#xff1a;https://www.cnblogs.com/persist/p/5197561.html Linux中环境变量包括系统级和用户级&#xff0c;系统级的环境变量是每个登录到系统的用户都要读…

Effective Java~36. 用EnumSet 代替位域

如果枚举类型的元素主要用于集合中&#xff0c;一般来说使用 int 枚举模式&#xff08;条目 34&#xff09;&#xff0c;下面将 2 的不同倍数赋值给每个常量&#xff1a; // Bit field enumeration constants - OBSOLETE! public class Text {public static final int STYLE_B…

在ACCESS中使用Group By语句

这样写不行&#xff0c;认为金额是一个变量 SELECT 编号, sum(本金) AS 金额 FROM sk GROUP BY 编号 ORDER BY 金额 只有这样 select * from (SELECT 编号, sum(本金) AS 金额 FROM sk GROUP BY 编号) ORDER BY 金额转载于:https://www.cnblogs.com/vincentfeng/archive/2009/1…

AI综述专栏 | 朱松纯教授浅谈人工智能:现状、任务、构架与统一

作者&#xff1a;朱松纯来源&#xff1a;人工智能前沿讲习班导读本文作者&#xff1a;朱松纯&#xff0c;加州大学洛杉矶分校UCLA统计学和计算机科学教授&#xff0c;视觉、认知、学习与自主机器人中心主任。文章前四节浅显探讨什么是人工智能和当前所处的历史时期&#xff0c;…

linux的grub损坏,如何利用Grub命令启动损坏的Linux系统?

能你的电脑因为某些原因损坏不能自动启动了。当然原因很多&#xff0c;可能的现象也很多。这里说一下这种情况下的处理方法&#xff0c;即&#xff1a;屏幕上提示 “ grub> ” &#xff0c;但你的硬盘上数据没有丢失&#xff0c;各分区都是好的。这种情况是你的 grub 信息损…

.net打包自动安装数据库

一).创建部署项目 1. 在“文件”菜单上指向“添加项目”&#xff0c;然后选择“新建项目”。 2. 在“添加新项目”对话框中&#xff0c;选择“项目类型”窗格中的“安装和部署项目”&#xff0c;然后选择“模板”窗格中的“安装项目”。在“名称”框中键入 setup1。 3. 单击“确…

Effective Java~37. 用EnumMap 代替序数索引

有时可能会看到使用 ordinal 方法&#xff08;条目 35&#xff09;来索引到数组或列表的代码。 例如&#xff0c;考虑一下这个简单的类来代表一种植物&#xff1a; class Plant {enum LifeCycle { ANNUAL, PERENNIAL, BIENNIAL }final String name;final LifeCycle lifeCycle;…

Python操作MSSQL

Python连接SQL Server数据库 - pymssql使用基础&#xff1a;https://www.cnblogs.com/baiyangcao/p/pymssql_basic.html 廖雪峰官网 之 Python 访问数据库&#xff08;SQLLite / MySQL / SQLAlchemy&#xff09; pymssql examples &#xff1a;http://pymssql.org/en/stable/p…

联想linux笔记本评测,联想(lenovo)G460AL-ITH Linux笔记本电脑接口评测-ZOL中关村在线...

模具和外观的“革新”让我们见识到不一样的联想G460&#xff0c;而在整机的接口扩展能力方面依旧主打实用性。机身左侧从左至右依次是安全锁孔、散热孔、RJ-45以太网接口、VGA视频输出接口、USB2.0接口、e-SATA接口(兼容USB2.0)、Express Card卡槽和HDMI高清视频输出接口。与前…

联合国召开会议讨论“杀手机器人”问题

来源&#xff1a;中国科学报 作者&#xff1a;赵熙熙来自29个国家的57位科学家日前呼吁联合抵制一所韩国大学&#xff0c;因为设立在该校的一个新的中心旨在利用人工智能强化国家安全。人工智能科学家表示&#xff0c;该大学正在开发自主武器&#xff0c;又称“杀手机器人”&a…

Effective Java~38. 用接口模拟可扩展的enum

使用枚举类型有一个很好的方法来实现这种效果。基本思想是利用枚举类型可以通过为 opcode 类型定义一个接口&#xff0c;并实现任意接口。 // Emulated extensible enum using an interface public interface Operation {double apply(double x, double y); } public enum Ba…

C语言的叙述大小写字母e1相同,第1、2章C语言基础练习题

第1章 C语言基础 第2章 顺序结构 练习题 学号&#xff1a; 姓名&#xff1a;单选&#xff1a;1. 当代电子计算机能够自动地处理指定的问题是因为( )。A. 计算机是电动的B. 有解决该问题的计算机程序 C. 事先存储了解决该问题的程序 D. 以上都不是2. C语言源程序的基本单位是( )…

咱也开始玩z-blog了

目前来讲&#xff0c;国内的个人网站基本上用wordPress于z-blog的比较多&#xff0c;wordPress用PHP开发的&#xff0c;z-blog用的是asp&#xff0c;鉴于PHP空间相对asp对一些&#xff0c;维护起来也比asp麻烦一点&#xff0c;众多个人站长中&#xff0c;相信看得懂一点asp的比…

Python 执行 shell命令 的几个方法小结

参考&#xff1a;https://blog.csdn.net/ronnyjiang/article/details/53333538 Python 执行 shell 命令 Python 可以执行 shell 命令的相关 模块 和 函数 有&#xff1a; os.systemos.spawnos.popen --- 废弃popen2.* --- 废弃commands.* --- 废弃&#x…

linux离线安装docker,centos离线安装docker

1.下载依赖包提取码: 3tus2. 先安装如下rpm依赖文件audit-libs-python-2.8.4-4.el7.x86_64.rpmcheckpolicy-2.5-8.el7.x86_64.rpmlibcgroup-0.41-20.el7.x86_64.rpmlibseccomp-2.3.1-3.el7.x86_64.rpmlibsemanage-python-2.5-14.el7.x86_64.rpmpolicycoreutils-2.5-29.el7.x86…

Effective Java~42. Lambda 优于匿名类

在 Java 8 中&#xff0c;添加了函数式接口&#xff0c; lambda 表达式和方法引用&#xff0c;以便更容易地创建函数对象。下面是一段代码片段&#xff0c;按照字符串长度顺序对列表进行排序&#xff0c;使用匿名类创建排序的比较方法 &#xff08;强制排序顺序&#xff09;&am…

Python 远程部署利器 Fabric2 模块

fabric 官网英文文档&#xff1a;http://www.fabfile.org/ 《Python自动化运维技术与最佳实践》 如何用 Fabric 实现无密码输入提示的远程自动部署&#xff1a; fabric实现远程操作和部署&#xff1a; 简介 Fabric 是一个 Python 的库&#xff0c;同时它也是一个命令行工具。…

【转】近期Coolite控件的技术点总结

1。Coolite下如何自定义控件样式表Code1<style type"text/css"> 2 .x-grid3-td-fullName .x-grid3-cell-inner {}{ 3 font-family:tahoma, verdana; 4 display:block; 5 font-weight:normal; 6 font-style…

Anaconda 完全入门指南

From&#xff1a;https://www.jianshu.com/p/eaee1fadc1e9 Anaconda官网&#xff1a;https://www.anaconda.com/ Anaconda 官网 文档&#xff1a;http://docs.anaconda.com/anaconda/user-guide Anaconda介绍、安装及使用教程&#xff1a;https://zhuanlan.zhihu.com/p/32925…

Effective Java~43. 方法引用优于Lambda

Java 提供了一种生成函数对象的方法&#xff0c;比 lambda 还要简洁&#xff0c;那就是&#xff1a;方法引用&#xff08; method references&#xff09;。下面是一段程序代码片段&#xff0c;它维护一个从任意键到整数值的映射。如果将该值解释为键的实例个数&#xff0c;则该…