socket编程中listen和accpet的理解
来源:互联网 发布:淘宝新店没生意怎么办 编辑:程序博客网 时间:2024/06/04 18:42
在服务器端,socket()返回的套接字用于监听(listen)和接受(accept)客户端的连接请求。这个套接字不能用于与客户端之间发送和接收数据。
accept()接受一个客户端的连接请求,并返回一个新的套接字。所谓“新的”就是说这个套接字与socket()返回的用于监听和接受客户端的连接请求的套接字不是同一个套接字。与本次接受的客户端的通信是通过在这个新的套接字上发送和接收数据来完成的。
再次调用accept()可以接受下一个客户端的连接请求,并再次返回一个新的套接字(与socket()返回的套接字、之前accept()返回的套接字都不同的新的套接字)。这个新的套接字用于与这次接受的客户端之间的通信。
假设一共有3个客户端连接到服务器端。那么在服务器端就一共有4个套接字:第1个是socket()返回的、用于监听的套接字;其余3个是分别调用3次accept()返回的不同的套接字。
如果已经有客户端连接到服务器端,不再需要监听和接受更多的客户端连接的时候,可以关闭由socket()返回的套接字,而不会影响与客户端之间的通信。
当某个客户端断开连接、或者是与某个客户端的通信完成之后,服务器端需要关闭用于与该客户端通信的套接字。
举个简单的例子(以下代码只是示范性的,用于说明不同套接字的作用,实际的函数会需要更多的参数):
/* 建立用于监听和接受客户端连接请求的套接字 */
server_sock = socket();
/* 绑定监听的IP地址和端口 */
bind(server_sock);
/* 开始监听 */
listen(server_sock);
/**
* 等待客户端连接请求,在没有客户端连接请求到来之前,
* 程序会一直阻塞在这个函数里。
*/
client_sock = accept(server_sock);
/**
* 已经接受客户端连接请求,accept()函数创建并返回了一个
* 新的套接字client_sock,用于与客户端通信。
* 如果不再需要接受其他客户端的连接请求,可以关闭监听
* 套接字了。
*/
close(server_sock);
/* 发送数据到客户端 */
send(client_sock, data);
/* 从客户端接收数据 */
recv(client_sock, data);
/* 通信结束,关闭与客户端通信的套接字 */
0 0
- socket编程中listen和accpet的理解
- socket 中listen() 与accept() 的一些理解
- windows socket编程中 listen()的backlog参数和未完成队列、已完成队列的关系
- Socket编程中 listen函数第二个形参backlog的作用
- Socket编程中 listen函数第二个形参backlog的作用
- c#学习笔记之十 socket编程的listen()方法参数的理解,即backlog
- accpet 返回的描述符理解
- socket编程(九)listen()
- socket编程之listen
- Socket中listen/accept函数的区别
- Socket中listen/accept函数的区别
- Socket中listen/accept函数的区别
- socket 中listen函数参数的解释
- Socket中listen/accept函数的区别
- Socket中listen/accept函数的区别
- Socket中listen/accept函数的区别
- Socket中listen
- Linux下C语言SOCKET中accpet返回值。
- 斐波拉契数列
- 查找最接近的元素
- UVA12108 Extraordinarily Tired Students 【模拟】
- ogg rep参数文件usedefaults
- 属性动画心得
- socket编程中listen和accpet的理解
- MySQL导入导出数据出现乱码的解决办法
- 快速排序问题
- Unix时间与Win32 FileTime时间
- poj3278 一维bfs 水题
- 合并排序
- 循环赛日程表问题
- File.separator & File.pathSeparator的区别
- 算法之路二:刘汝佳算法竞赛入门经典 计算数组元素和