TCPIP大作业-基于TCP的网络通信编程C语言版(江南大学)

上传人:我*** 文档编号:132208138 上传时间:2020-05-13 格式:DOC 页数:44 大小:1.50MB
返回 下载 相关 举报
TCPIP大作业-基于TCP的网络通信编程C语言版(江南大学)_第1页
第1页 / 共44页
TCPIP大作业-基于TCP的网络通信编程C语言版(江南大学)_第2页
第2页 / 共44页
TCPIP大作业-基于TCP的网络通信编程C语言版(江南大学)_第3页
第3页 / 共44页
TCPIP大作业-基于TCP的网络通信编程C语言版(江南大学)_第4页
第4页 / 共44页
TCPIP大作业-基于TCP的网络通信编程C语言版(江南大学)_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《TCPIP大作业-基于TCP的网络通信编程C语言版(江南大学)》由会员分享,可在线阅读,更多相关《TCPIP大作业-基于TCP的网络通信编程C语言版(江南大学)(44页珍藏版)》请在金锄头文库上搜索。

1、 TCP/IP协议编程大作业课题名称 基于TCP的网络通信 专 业 计算机科学与技术 班 级 计算机1206 学 号 学生姓名 王 成 义 物联网工程学院摘 要此TCP/IP课程设计实现了基于TCP的客户/服务器通信程序,具体实验过程通过有连接服务为主体,无连接服务为辅并利用事件对象I/O管理来实现。客户机具有注册,登陆,单聊,私聊,在线人数列表,退出等功能。目 录一、 总体设计41、基本通信协议选取42、通信过程设计43、通信过程数据包设计44、 程序流程图5二、 客户端程序61、功能:62、原理:63、程序清单6三、 服务器端程序191、功能:192、原理:193、程序清单:19四、 运行

2、结果351、 服务器端截图352、客户端截图371、 总体设计1、基本通信协议选取TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。而UDP则不为IP提供可靠性、流控或差错恢复功能。TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。本次实验基于TCP/IP协议利用事件对象I/O管理实现基本的聊天功能,包括注册,登录,群聊,私聊

3、及在线人数统计。2、通信过程设计2.1客户端设计a. 本地服务器主要功能:1)接收远程服务器转发的消息并显示消息。b. 本地客户端主要功能:1)发送建立TCP连接的请求操作;2)发送注册信息,登陆消息及退出请求;3)发送群聊消息,私聊消息,在线人数统计及退出请求。2.2服务器端设计a. 远程服务端主要功能:1)监听客户端的连接请求;2)提供注册服务,验证登陆请求和验证功能;3)查看在线人数,发送在线状态;4)发送群聊消息及私聊消息。3、通信过程数据包设计3.1客户端数据包设计:a.注册:0user(用户名)password(密码)b.登陆:1user(用户名)password(密码)c.聊天:

4、0)群聊:2user(用户名)str(内容)1)单聊:5str1(单聊对象名)user(用户名)*str(内容)2)在线用户4user(用户名)str(内容)3)退出(登录):3user(用户名)3.2服务端数据包设计:a.注册应答:00注册成功01注册失败用户名已存在b.登陆应答:10登陆成功12用户名不存在11密码不正确1该用户已登陆c.聊天:1)单聊:61单聊对象不在线50单聊对象在线60单聊对象不存在2)群聊:30广播消息31非正确用户的消息,不广播3)在线人数:40显示当前在线人数并发给查询客户4、 程序流程图2、 客户端程序1、功能:1.1注册:向服务器发送注册信息。然后接收服务器

5、返回的应答信息。1.2登陆:向服务器发送登陆信息。接收服务器返回的应答信息。1.3聊天:登陆成功后,选择群聊或单聊进行聊天,选择在线用户可进行查询当前在线用户,选择退出可退出登录。a.单聊:从在线用户中选择一个,与其单聊b.群聊:向所有在线的用户发送消息c.退出聊天:退出此次聊天,但不断开连接d.退出登陆,断开连接,退出时不需要发送下线信息,直接退出1.4面向连接的客户/服务器程序工作模型:2、原理:客户机在注册或登陆时首先和服务器连接,注册完或登陆失败断开连接,登陆成功不断开连接,使用send和recv发送接收数据,根据上述的数据报的定义,发送相应的数据报。3、程序清单3.1客户端接收器(本

6、地服务器)代码#include#include#include#include#pragma comment(lib,ws2_32.lib)#define DEFAULT_PORT 5051/FOR RECV#define BUFFER_LENGTH 1000void MySendMessage(SOCKET sSocket,char *response,int responseLen, struct sockaddr* cli,int cliLen);void main()int iPort=DEFAULT_PORT;WSADATA wsaData;SOCKET sSocket,wchysS

7、ocket;int iLen,wchyiLen;int iSend;int iRecv;char send_buf1000;char recv_bufBUFFER_LENGTH;struct sockaddr_in ser,cli,wchy;printf(-n);printf(cServer Waitingn);printf(-n);if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)printf(Failed to load Winsock.n);return;sSocket=socket(AF_INET,SOCK_DGRAM,0);if(sSocket=INV

8、ALID_SOCKET)printf(socket()Faild:%dn,WSAGetLastError();return;ser.sin_family=AF_INET;ser.sin_port=htons(iPort);ser.sin_addr.s_addr=htonl(INADDR_ANY);if(bind(sSocket,(LPSOCKADDR)&ser,sizeof(ser)=SOCKET_ERROR)printf(bind()Faild:%dn,WSAGetLastError();return;iLen=sizeof(cli);memset(recv_buf,0,sizeof(rec

9、v_buf);while(1)/接收数据包 确定cli 表示 cli存有客户端发来的 ip和port iRecv=recvfrom(sSocket,recv_buf,BUFFER_LENGTH,0,(SOCKADDR*)&cli,&iLen);if(iRecv=SOCKET_ERROR)printf(recvfrom()Faild:%dn,WSAGetLastError();return;else if(iRecv=0) break;else / 接收到了正确数据/printf(+%sn,recv_buf);/控制信息的种类有00 01 10 11 12 20 21 30 31/00注册成功

10、01 注册失败 10登陆成功 11.12表示登陆失败 20表示一次成功会话 21表示错误会话 30表示成功推出 31表示错误推出switch(recv_buf0)case 0:if(recv_buf1=0)printf(注册成功n);else printf(注册失败n);break;case 1:if(recv_buf1=0)printf(登陆成功n);wchy.sin_family=AF_INET;wchy.sin_port=htons(5053);wchy.sin_addr.s_addr=inet_addr(127.0.0.1);wchysSocket=socket(AF_INET,SOC

11、K_DGRAM,0);if(wchysSocket=INVALID_SOCKET)printf(socket()Failed:%dn,WSAGetLastError();return;wchyiLen=sizeof(wchy);strcpy(send_buf,#);MySendMessage(wchysSocket,send_buf,sizeof(send_buf),(struct sockaddr*)&wchy,wchyiLen);else if(recv_buf1=)printf(已经在其他地方登陆n);wchy.sin_family=AF_INET;wchy.sin_port=htons

12、(5053);wchy.sin_addr.s_addr=inet_addr(127.0.0.1);wchysSocket=socket(AF_INET,SOCK_DGRAM,0);if(wchysSocket=INVALID_SOCKET)printf(socket()Failed:%dn,WSAGetLastError();return;wchyiLen=sizeof(wchy);strcpy(send_buf,*);MySendMessage(wchysSocket,send_buf,sizeof(send_buf),(struct sockaddr*)&wchy,wchyiLen);elseprintf(登陆失败n);wchy.sin_family=AF_INET;wchy.sin_port=htons(5053);wchy.sin_addr.s_addr=inet_addr(127.0.0.1);wchysSocket=socket(AF_INET,SOCK_DGRAM,0);if(wchysSocket=INVALID_SOCKET)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 事务文书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号