Skip to content

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;

服务端开发流程

  1. 创建socket,返回一个文件描述符lfd

    • socket()
    • 该文件描述符用于监听客户端连接
  2. 将lfd和IP PORT进行绑定

    • bind()
  3. 将lfd由主动变为被动监听

    • listen()
  4. 接受一个新的连接,得到一个文件描述符cfd

    • accept()
    • 该文件描述符是用于和客户端进行通信的
  5. c
     while(1){
       接收数据---read或者recv
       发送数据---write或者send
     }
  6. 关闭文件描述符

    • close(lfd);
    • close(cfd);

代码实现

cpp

客户端的开发流程

  1. 创建socket, 返回一个文件描述符cfd

    • socket()
    • 该文件描述符是用于和服务端通信
  2. 连接服务端

    • connect()
  3. c
     while(1){
       //发送数据---write或者send
       //接收数据---read或者recv
     }
  4. close(cfd);

一些细节 调用accept函数不是说新建一个连接,而是从已连接队列中取出一个可用连接。