面向连接的协议 [2 ]
来源:互联网 发布:php类魔术方法 编辑:程序博客网 时间:2024/05/17 04:10
面向连接的协议—服务器端
由图我们可以看出,服务器与客户的区别在于:
服务器必须进行套接口绑定。因为如果服务器没有地址,客户就无法进行连接。
S3的作用在于告诉内核,在某个套接口上监听并接收请求。
服务器需要监听连接。
下面,我们介绍一下有关的函数,
intlisten(int sockfd, int backlog);
s:用于监听的套接口。Backlog:监听队列(the queue of pending connections)的最大长度。
2.2之后的版本中,backlog的值只包括与监听套接口建立了的连接数。
成功:返回0,否则,返回-1,失败原因 在errno中。
监听队列
如上图,对listen函数调用成功后,在Linux内核中建立了一个监听队列,它的长度由
backlog决定。图中正在处理请求1,第2 到第5的连接请求被挂起,第6个请求正在插入队列,同时内核还收到了7,8,9号连接。更多的连接正在到达的路上。
accept函数
intaccept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
sockfd:由socket()创建,已经用bind()绑定了一个本地地址,正在监听连接的套接口的描述符。
addr:用于存放通信的另一端(客户)的套接口地址的变量。
addrlen:既是输入参数又是输出参数。作为输入参数,它指定了addr的最大长度。作为输出参数,当函数返回后,它代表了地址的实际长度。
如果函数调用成功,它返回一个新的套接口描述符。否则,返回-1,错误的原因记录在errno
中。在新的套接口代表服务器端与客户端进行通信。当客户请求处理完毕时,这个由accept返回的套接口将关闭。而为了能够接收新的用户请求,在此期间,sockfd指定的,也就监听套接口,一直处于打开状态。
小节:这里提到了两种套接口,一种是监听套接口,数量只有一个,作用是接收用户请求并创建新的套机口(通信套接口)。另一种,accept返回的通信套接口,它同用户进程连接,并实现数据的读写操作。
下面是一个简单的TCP/IP服务器程序,用来代替daytime服务器。
成功。
扩展:
TCP/IP的1~1024端口都被保留起来了,一般自己写的服务器程序使用>=1024的端口
0:表示通配端口,系统会自动的为它分配一个没有使用的端口。
INADDR_ANY:通配IP地址。
严格意义上讲,服务器的地址包括IP地址和端口号两部分。
一个服务器地址不能完全通配。服务器地址完全通配,当且仅当Ip地址和端口号都通配。
这样,在指定了特定端口号后,IP地址部分可以通配(INADDR_ANY),这使得服务器可以接受客户发往任何一个本地接口的连接请求。当一个主机有多个IP接口时(如网关),这极为重要。
- 面向连接的协议 [2 ]
- 面向连接的协议 [1]
- 5 面向非连接的协议
- Winsock学习----面向连接的协议(一)
- Windows的网络编程-之二-面向连接的协议
- 使用 TCP 协议的面向连接的客户-服务器程序设计
- 笔记5 --TCP是面向连接的运输层协议
- 面向连接和无连接协议
- 面向连接和无连接协议
- 基于 TCP (面向连接)和无连接UDP协议的 socket 套接字编程
- 面向协议的MVVM
- Windows的网络编程-之三-面向无连接的协议
- 面向连接的技术
- 面向连接的服务
- 学习笔记《实战Linux Socket编程》第六章 面向非连接的协议
- 学习笔记《实战Linux Socket编程》第七章 面向连接的协议──客户端
- 学习笔记《实战Linux Socket编程》第八章 面向连接的协议──服务端
- 设计一个在UDP之上提供面向连接服务的可靠传输协议
- C++Template头文件和定义分开编译的问题
- 140种标准颜色的宏定义
- 在WinCE下绘制半透的效果要注意的问题
- Unix/Linux中socket通讯练习
- Android查看sqlite数据库内容的方法
- 面向连接的协议 [2 ]
- 利用Myeclipse自动生成webService客户端代码
- MySQL安装【图文详解】(window 7系统环境)
- 1.和男朋友聊天,说到兴起,口水四溅,溅到了他脸上。然后他本能地用手擦去。我有点不好意思,但是故意转移重点装作很生气:“干嘛?嫌弃我啊??”他满脸绅士般的笑容说:“没,抹匀!”
- symbian文件和目录
- 实现Wince程序的安装包制作的自动化
- 制作在wince系统上的安装程序解决方案
- Spring Ioc 之二 -依赖注入的几种方式
- 在.NET平台下使用SQL2000 Image类型数据