#斌酱归档-C语言实现简单聊天室

归档-C语言实现简单聊天室

1-1.TCP 的分组交换流程

站在 Linux 系统编程的角度来看 TCP 协议栈的状态转移分为三个阶段讲解:

三次握手建立连接阶段:首先由客户机调用 connect 函数发起主动连接,激发 TCP 协议栈发送 SYN 报文;服务器协议栈收到该 SYN 报文后, 发送给处于 LISTEN 状态的套接字,应用进程通过 accept 函数激发 TCP 协议栈发送 SYN+ACK 报文,接受连接请求;客户机收到服务器 SYN+ACK 报文后发送确认 ACK 报文,进入 ESTABLISHED 状态;当服务器收到客户机 ACK 报文后,也进入ESTABLISHED 状态,accept 函数返回。

数据传输阶段:这一阶段主要的任务就是通过调用 read,write 函数收发消息。

四次挥手断开连接阶段:客户端发送一个 FIN,用来关闭客户到服务器的数据传送;服务器收到这个 FIN,它发回一个 ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号;服务器关闭与客户端的连接,发送一个FIN给客户端;客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

在这里插入图片描述

本实验的编程将基于该流程进行。客户机创建套接字(socket),与服务器连接(connnect),成功后和内核 TCP 协议栈进行读写交互(write、read)来收发信息。
服务器创建套接字(socket)、绑定到特定的服务器 IP 地址和端口(bind),然后将其设置为监听客户请求的状态(listen)。如果有来自客户机的请求,则接收连接(accept),成功后和内核 TCP 协议栈进行读写交互(write、read)来收发信息。

1-2.套接字联网有关的函数调用

关于socket一系列函数的使用

1-3.聊天室采用C/S模型

大多数网络应用按照划分成客户(client)和服务器(server)来组织的。在设计网络应用时,确定总是由客户发起请求往往能够简化协议和程序本身。通常客户每次只与一个服务器通信,在该项目实现的聊天室服务端程序是基于下图的模型,客户发起通信的大概流程是:

首先客户1发送消息到聊天室服务器;

然后由该聊天室服务器广播该消息到同一个聊天室的其他成员;

这样就到达聊天室所有成员都可以共享聊天消息。

1-4.源码

孤独的我写了1k+行的聊天室代码孤独的自己和自己聊天
聊天室GitHub源码

1-5.实验截图

自己的聊天室

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值