2019-11-21实现基于TCP的服务器/客户端

2019-11-21  本文已影响0人  林定益想去NASA捡垃圾

TCP服务器端的默认函数调用顺序

图片来自《TCP/IP网络编程》.png

除了创建套接字,声明并初始化地址信息结构体变量,调用bind函数向套接字分配地址。
接下来还要经过那么几个过程:

进入等待连接请求状态

#include <sys/socket.h>

int listen(int sock,int backlog)

受理客户端连接请求

调用listen函数后,若有新的连接请求,则应按序受理。受理请求意味着进入可接收数据的状态。这时候需要另外一个套接字,但没必要亲自创建。下面这个函数会自动创建套接字,并连接到发起请求的客户端。

#include <sys/socket.h>
int accept(int sock,struct sockaddr * addr, socklen_t * addrlen);

TCP客户端的默认函数调用顺序

图片来自《TCP/IP网络编程》.png

与服务器端相比,区别在于“请求连接”,它是在创建客户端套接字之后向服务器发起的连接请求。该请求需要在服务器端调用listen函数之后

#include <sys/socket.h>
int connect(int sock,struct sockaddr * servaddr,socklen_t addlen); 
  1. 服务器端接收连接请求
  2. 发生断网等异常情况而中断连接请求
    需要注意:所谓的“接收连接”并不意味着服务器调用accept函数,其实是服务器端把连接请求信息记录到等待队列。因此connect函数返回后并不立即进行数据交换。

实现服务器端必经过程之一就是给套接字分配IP和端口号。但客户端实现过程中并未出现套接字地址分配,而是创建套接字后立即调用connect函数。并不是客户端套接字无需分配,而是在connect函数中自动分配了。

基于TCP的服务器端/客户端函数调用关系

图片来自《TCP/IP网络编程》.png
上一篇 下一篇

猜你喜欢

热点阅读