【TCP服务器和客户端的简单编写】

TCP服务器和客户端的简单编写

TCP简介

  1. TCP是什么
    传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 [1] 定义。
  2. TCP的三次握手和四次挥手
    TCP协议使用严格的应答机制来确保可靠性,在建立连接时进行三次握手,断开链接时进行四次挥手。
    三次握手如下:
    client---------------SYN=1------------------>server
    server--------------SYN=1,ACK=1------->client
    client----------------ACK=1------------------>server
    四次挥手如下:
    client---------------FIN------------------------>server
    server--------------ACK---------------------->client
    server--------------FIN------------------------>client
    client----------------ACK---------------------->server

TCP服务器的设计流程

服务器编写五步:

  1. 建立套接字sfd = socket(AF_INET,SOCK_STREAM,0);
  2. 绑定IP地址与端口号ret = bind(sfd,(const struct sockaddr)&src,sizeof(src));
  3. 创建监听队列,让套接字进入被动监听状态ret = lisent(sfd,BACKLOG);
  4. 接受连接,产生新的套接字ret = accept(sfd,(struct sockaddr *)&cli,&clilen);
  5. 数据读写recv_byte = recv(cfd,buf,sizeof(buf),0); send_bytes = send(cfd,buf,recv_byte,0);

客户端:

  1. 建立套接字sfd = socket(AF_INET,SOCK_STREAM,0);
  2. 连接服务器发出请求ret = connect(sfd,(struct sockaddr *)ser,sizeof(ser));
  3. 数据收发和服务器相同recv_byte = recv(cfd,buf,sizeof(buf),0); send_bytes = send(cfd,buf,recv_byte,0);`

只能接纳一个客户的服务器和客户端代码实现

服务器:
请添加图片描述
客户端:在这里插入图片描述

多个客户端的并发服务器

使用多进程

  1. 父进程负责建立连接,子进程负责与客户端的数据接收发送。每连接一个客户端创建一个新的子进程。还要注意当客户端断开连接后僵尸子进程的回收。可以使用信号进行异步处理,杀死子进程。
  2. 不足之处在于每个进程都需要单独分配内存空间,消耗更多资源。
  3. 使用signal函数回收僵尸进程signal(SIGCHLD,signal_hander) == STG_ERR;zom_pid = wait(NULL);
    创建进程和父子进程分工合作:
    请添加图片描述
    使用信号回收子进程:在这里插入图片描述

使用多线程

  1. 每当有一个客户端发送连接请求,就创建一个子线程,使用线程可以节约资源,减少复杂的进程间的通讯。
  2. 可以用子线程分离函数pthread_detach(pthread_thread);释放子线程资源。

SELECT多路复用IO

未完待续。。。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值