目录
1.服务端创建流程
服务端流程:(被动连接,需创建自己的地址信息)
1.创建两个文件描述符,一个用于创建监听套接字,一个用于服务端与客户端之间连接成功后传输数据的套接字;
2.创建服务端地址结构,指定服务端的IP协议簇、IP地址和端口号;(服务端创建自己的地址信息)
2.将监听套接字与服务端的地址信息进行绑定,调用函数为bind();
3.将监听套接字设定为监听状态,开始监听,并且设定同时连接数上限,所有连接请求将放在一个连接请求队列里面,调用函数listen();
4.在监听套接字处的连接请求队列中,取出第一个连接请求来建立连接,如果没有连接请求则会一直阻塞,调用函数accept(),如果连接成功则会返回这个新连接的套接字,这个表征新连接的套接字才表示一个成功的连接,后续的数据传输都是通过这个套接字进行的。通过accept()函数可获得成功接入的客户端的地址结构;
5.上述流程都执行成功后,说明服务端与客户端连接成功,就可以使用read()读取客户端发来的信息,write()向客户端进行信息写入了。(read和write都是使用新连接的套接字)
2.服务端程序
#include <iostream>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string.h>
#include <errno.h>
#define SERV_PORT 8888 //服务器端口
#define SERV_IP "127.1.1.1" //服务器ip
using namespace std;
int main(int argc,char** argv)
{
int servfd,clitfd; //创建两个文件描述符,servfd为监听套接字,clitfd用于数据传输
struct sockaddr_in serv_addr,clit_addr; //创建地址结构体,分别用来存放服务端和客户端的地址信息
memset(&serv_addr,0,sizeof(serv_a