![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Unix网络编程
Cbee
学而不思则罔,思而不学则殆。
展开
-
Unix网络编程之select实现服务器端程序
1.先看一下select 函数原型:#include#includeint select (int maxfdp1,fd_set *readset, fd_set *writeset,fd_set *exceptset,const struct timeval *timeout);其中,maxfdp1 是select 所要监听的最大描述符,所谓描述符就是一些 int 型的id值,比原创 2016-09-19 17:55:10 · 378 阅读 · 0 评论 -
Unix网络编程之给阻塞式函数设定超时限定
1.给read函数设定超时时间。代码:int read_timeout(int fd,unsigned int wait_seconds){ int ret = 0; if(wait_seconds > 0){ fd_set set; struct timeval timeout;原创 2016-09-29 17:11:17 · 437 阅读 · 0 评论 -
Unix网络编程之readline函数
1.为什么要使用readline函数?首先我们先考虑一下网络字节流传递消息的时候的黏包问题,我们之前的解决办法是将存放消息的buf定义成一个结构体,里面有一个len成员用来记录下一次我要发送多少个字节的消息。我们可以再想一种方法,我们把消息之间用一个标识符隔开,这样每个包之间就可以分离开来。比如我们可以像ftp那样用一个‘/r/t‘隔开。2.使用readline需要注意的地方:首先我们先用re原创 2016-09-26 19:19:03 · 1822 阅读 · 0 评论 -
Unix网络编程之服务器回射客户端多线程编程02-server.c client.c
知识点:1.在网络传输中,如果使用TCP传输协议传输内容,由于TCP是以字节流的形式进行传输的,而且在TCP传输层的分节在传到IP层的时候会被拆分(如果发送的比较多的话),而且IP数据报在再往下传送的时候由于数据链路层的MTU只有1500个字节,因此IP数据报会再被分成数据帧,虽然有帧的概念,但是tcp以流的形式进行传输,而且发送的数据具有时间随机性,就是说在任何一段时间有可能发送了好几帧。接原创 2016-09-25 20:44:33 · 667 阅读 · 0 评论 -
Unix网络编程之点对点聊天-客户端与服务器实现
1.点对点聊天主要实现一个客户端与一个服务器端的通讯模型。2.点对点聊天的实现需要服务器和客户端都得有至少两个进程来实现,一个用来发送给对方,一个用来接收对方发送的消息。3.设计阶段需要考虑当进程结束了,或者接收到来自对方的FIN,应不应该通知其他进程,当进程结束了不要忘了break 退出循环。代码: server.c#include#include#include#原创 2016-09-25 10:47:57 · 769 阅读 · 0 评论 -
Unix网络编程之服务器回射客户端多线程编程01-server.c
1.实现服务器的多线程编程的重要函数时fork(),该函数会重新建立一个进程,原来的进程执行的任务会复制到新的进程中来,而这个新的进程 就是原来的进程的子进程。2.新建立的子进程主要用来和客户端进行通讯。是对connfd套接字描述符来进行操作的。而父进程主要用来接受新来的客户端并通过fork为新来的客户端建立一个新的进程的。3.父进程和子进程都共用一个套接字。仅仅关闭一个进程,套接字的描述原创 2016-09-23 17:52:09 · 858 阅读 · 0 评论 -
Unix网络编程之epoll函数模拟10万客户端链接服务器
1.epoll函数是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事原创 2016-10-09 19:32:33 · 2507 阅读 · 0 评论 -
Unix网络编程之回射客户端-client.c
1.定义socket。2.connect。3.输入文本,写入socket。4.从soctet 读出数据,放入缓冲区。5.输出到屏幕上。6.close 套接字。代码:#include#include#include#include#include#include#include#include#define ERR_EXIT(m)\原创 2016-09-23 15:27:00 · 543 阅读 · 0 评论 -
Unix网络编程之回射客户端文本-server.c
1.定义socket,2.bind。3.listen。4.accept。5.close。直接上代码:#include#include#include#include#include#include#include#include#include#define ERR_EXIT(m)\ do\ {\原创 2016-09-23 15:19:32 · 419 阅读 · 0 评论 -
Unix网络编程之select版客户端实现
1.当客户端阻塞于某个输入操作时,服务器发送过来的终止连接的消息或者服务器崩溃的FIN,客户端将接受不到,而客户端以为服务器还在正常运行,一味的给服务器发消息。那么客户端将收到一个RST,但是客户端正忙于其他操作,忽略了这个RST,客户端继续调用read方法,如果read方法调用发生在RST到来之前,将返回一个0(EOF),否则返回一个ECONNRESET(对方复位连接错误),最终退出程序。2原创 2016-09-19 19:37:17 · 601 阅读 · 0 评论 -
Unix网络编程之poll函数实现服务器反射客户端-server.c
1.poll 函数:int poll(struct pollfd *fds,nfds_t nfds,int timeout); 其中第一个参数表示struct pollfd 结构体的数组,struct pollfd 的结构体如下:struct pollfd{ int fd; short events; short revents;}原创 2016-09-29 20:33:59 · 854 阅读 · 0 评论