linux socket编程、server端有几个socket绑定不同端口、想用select函数实

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux socket编程、server端有几个socket绑定不同端口、想用select函数实相关的知识,希望对你有一定的参考价值。

linux socket编程、server端有几个socket绑定不同端口、想用select函数实现非阻塞accept、现在不明白、select函数返回的是可供读写的文件描述符数量、怎么判断是哪个集合中的哪个文件可以读写了呢?、

参考技术A fd_set rdfds; /* 先申明一个 fd_set 集合来保存我们要检测的 socket句柄 */
struct timeval tv; /* 申明一个时间变量来保存时间 */
int ret; /* 保存返回值 */
FD_ZERO(&rdfds); /* 用select函数之前先把集合清零 */
FD_SET(socket, &rdfds); /* 把要检测的句柄socket加入到集合里 */
tv.tv_sec = 1;
tv.tv_usec = 500; /* 设置select等待的最大时间为1秒加500毫秒 */
ret = select(socket + 1, &rdfds, NULL, NULL, &tv); /* 检测我们上面设置到集合rdfds里的句柄是否有可读信息 */
if(ret < 0) perror("select");/* 这说明select函数出错 */
else if(ret == 0) printf("超时\n"); /* 说明在我们设定的时间值1秒加500毫秒的时间内,socket的状态没有发生变化 */
else /* 说明等待时间还未到1秒加500毫秒,socket的状态发生了变化 */
printf("ret=%d\n", ret); /* ret这个返回值记录了发生状态变化的句柄的数目,由于我们只监视了socket这一个句柄,所以这里一定ret=1,如果同时有多个句柄发生变化返回的就是句柄的总和了 */
/* 这里我们就应该从socket这个句柄里读取数据了,因为select函数已经告诉我们这个句柄里有数据可读 */
if(FD_ISSET(socket, &rdfds)) /* 先判断一下socket这外被监视的句柄是否真的变成可读的了 */
/* 读取socket句柄里的数据 */
recv(...);

python socket编程

一. 弄懂HTTP、Socket、TCP这几个概念
二. client和server实现通信


  服务端
  客户端
  socket发送http请求
  写类模拟urllib类
  urllib和socket区别
  urllib支持client,但是socket支持server、client等等
  urllib支持http、ftp等协议属于应用层是包装过socket的
  学习socket的目的不是为了让大家在任何时候都用socket去编程,而是要知道底层后期理解协程容易、以及具体问题在解决的时候首先能想到还有socket底层可以用


三. socket实现聊天和多用户连接


四. socket模拟http请求


五. 本章小结

以上是关于linux socket编程、server端有几个socket绑定不同端口、想用select函数实的主要内容,如果未能解决你的问题,请参考以下文章

linux系统UDP的socket通信编程3

socket编程

python socket编程

linux下基于socket的聊天软件

linux系统UDP的socket通信编程2

计算机网络|C语言Socket编程,实现两个程序间的通信