Socket通信流程
使用socket的API函数编写服务端和客户端程序的步骤图示:
根据服务端和客户端编写代码的流程,编写代码并进行测试。测试过程中可以使用netstat
命令查看监听状态和连接状态。
netstat命令:
netstat -anp | grep 8888
a
表示显示所有,
n
表示显示的时候以数字的方式来显示
p
表示显示进程信息(进程名和进程PID)
作业
自己编写代码熟悉一下服务端和客户端的代码开发流程;设计服务端和客户端通信协议(属于业务层的协议),如发送结构体:
c
typedef struct teacher_ {
int tid;
char name[30];
int age;
char sex[30];
int sal;
} teacher;
typedef struct student_ {
int sid;
char name[30];
int age;
char sex[30];
} student;
typedef struct SendMsg_ {
int type;//1 - teacher;2 - student
int len;//
char buf[0];//变长发送数据
} SendMsg;
服务端开发流程
创建socket,返回一个文件描述符
lfd
socket()
- 该文件描述符用于监听客户端连接
将lfd和IP PORT进行绑定
bind()
将lfd由主动变为被动监听
listen()
接受一个新的连接,得到一个文件描述符
cfd
accept()
- 该文件描述符是用于和客户端进行通信的
- c
while(1){ 接收数据---read或者recv 发送数据---write或者send }
关闭文件描述符
close(lfd);
close(cfd);
代码实现
cpp
客户端的开发流程
创建socket, 返回一个文件描述符cfd
socket()
- 该文件描述符是用于和服务端通信
连接服务端
connect()
- c
while(1){ //发送数据---write或者send //接收数据---read或者recv }
close(cfd);
一些细节 调用accept函数不是说新建一个连接,而是从已连接队列中取出一个可用连接。