《计算机网络》实验报告socket编程
学姓学
院名号
(后边附有源代码地址)年月日
f计算机科学与技术
Phase1Establishi
gClie
tServerCommu
icatio
s
1题目要求
此题目要求实现一个通过TCP套接字来建立连接的通讯服务器和客户端需要实现以下5个功能:1客户端与服务器建立连接,需要用户名和加密密码。2客户端发送想分享的文件名给服务器。3客户端发送一个想下载的文件查询。4客户端显示收到的回复信息,并显示。5登出。
2开发环境
操作系统:Li
ux2632279el6x86_64编程语言:C99编译器:GCC44620120305RedHat4464
3程序详解
网络和IO使用单线程利用epoll实现非阻塞异步IO。此部分功能主要用于实现多客户端的网络IO的轮询处理,使用Li
ux内核中的EPOLL特性实现。维护一个哈希表Clie
t,用于将文件描述符与客户端数据(如接收缓冲区、发送缓冲区和会话状态等)进行映射。对应主要的功能函数包括:i
t
ewclie
tidi
tfd用于在Clie
t哈希表中创建新项,与提供的文件描述符fd对应。i
tfd2clie
tidi
tfd用于在Clie
t哈希表中根据提供的文件描述符fd查找项目。voidset
o
blocki
gi
tsock设置SOCKET为非阻塞模式i
tserver_startupu_shortport在指定的端口上启动trackerd监听服务,并设置epolli
tpush_datastructclie
t_dataclie
tcharbufi
tle
向指定的客户端推送数据,会先进入客户端数据体内的发送缓冲区,再等待
f计算机科学与技术
由epoll通知就绪时发送voidclose_clie
ti
tclie
tid关闭指定的客户端,释放资源i
tserver_loop网络服务循环,调用epoll来接受连接和就绪通知,并监视连接中断,如有数据就绪则使用recv放入接收缓冲区,如通知发送就绪则将用se
d将发送缓冲区中的数据发送至客户端。对于新客户端连接,调用accept。以上操作都是非阻塞的。数据包处理i
tha
dle_packetstructclie
t_dataclie
t立即处理接收缓冲区中的完整数据包(即以”
”结尾的消息),将处理完成的部分从缓冲区中移除i
tpush_packetstructclie
t_dataclie
tcharco
stfmt按指定的格式化方式向客户端发送数据包,是push_data的上层封装i
tha
dle_sharestructclie
t_dataclie
tcharcomma
di
tle
处理SHRE消息i
tha
dle_searchstructclie
t_dataclie
tcharcomma
di
tle
处理SRCH消息i
tha
dle_quitstructclie
t_dataclie
tcharcomma
di
tle
处理QUIT消息i
tha
dle_logi
structclie
t_dataclie
tcharcomma
di
tle
处理LGIN消息i
tha
dle_comma
dstructclie
t_dataclie
tcharcomma
di
tle
核心消息分发函数,将根据消息前4字节判断消息类型,并调用相应处理函数r