资源预览内容
第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
第9页 / 共14页
第10页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
计算机网络课程设计 基于C/S结构的套接字程序设计(TCP) 学院:信息技术工程学院 班级:计科1011班 姓名:周玲玲 学号: 02210101140 指导老师: 黄彦目录 1、引言-1 课题目的及要求-2 研究设想-2 相关理论-2 预期结果-2 2、关键词-2 3、正文-3 理论基础-3 设计方法及思路-3 编程方法-4 主要内容及其分析-6 实验结果及对其讨论-9 4、结论-10 核心-10 难点-10 问题-10不足及对其改进-105、致谢-11 6、参考文献-11 引言基于C/S结构的套接字程序设计(TCP)1、目的及要求(1)目的和意义通过编程了解C/S结构的网络通信模型;掌握基于C/S结构的Windows Socket TCP的程序设计方法。(2)基本要求按照C/S模型编写两个程序。一个为客户端程序,另一是服务器端程序;对于C/S两端都应输出必要的日志、出错或诊断信息。(3)小组人数:22、研究设想 能够实现当客户端向服务器端发送请求时,服务器端能够向客户端传送数据。3、相关理论 TCP是一种面向链接的,可靠的传输协议。TCP协议在网络层IP协议的基础上,向应用层用户进程提供可靠地全双工的数据流传输。并且通过创建的流式套接字实现服务器端与客户端的数据传送。4、预期结果 实现服务器端与客户端的数据传送。关键词流式套接字;TCP/IP;服务器/客户端; 正文1、理论基础应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCPIP协议交互提供了称为套接字(Socket)的接口,区分不同应用程序进程间的网络通信和连接。网络化的应用程序在开始任何通讯之前都必需要创建套接字。Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。套接字,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。2、设计方法及思路客户机与服务器建立连接,连接是通过申请的套接字实现的客户打开一个套接字并把它约束在一个端口上如果成功就相当于建立一个虚拟文件以后就可以在虚拟文件上写数据并通过网络向外传送,完成连接后就可以通信了。客户机向服务器发送请求,打开一个连接后,客户机把请求消息送到服务器的停留端口上,完成提出请操作。服务器在处理完客户的请求之后,要向客户机发送响应消息。客户和服务器双方都可以通过关闭套接字来结束TCP/IP对话。当使用TCP/IP协议一发客户服务器服务程序时,服务器需要等待任意数量客户端的连接,以便以他们提供服务。客户端连接服务器时,必须先知道服务器的名称。在TCP/IP中,就是服务器的IP地址和端口号。bind()函数实现将服务器绑定到一个已知的名字上的功能。接下来要将服务器套接字设置为监听状态,这是通过listen()函数完成的。在监听状态下,如果客户端向服务器发起连接请求,服务器通过调用accept()函数来接受该接连请求。服务器与客户端完成连接后,就可以进行数据通信了。对客户端来说,首先调用connect()函数向服务器发出连接请求。如果服务器接受了该请求,接下来就可以与服务器通信了。开发套接字应用程序时,首先应进行Windows Sockets的初始化,加载Windows Sockets的实现,然后创建套接字,对TCP套接字来说,需要在socket()函数或都WSASocket()函数中指明SOCK_STREAM套接字类型。当服务器和客户端通信结束时,关闭套接字,释放Windows Sockets的实现。流程如下:服务器:创建套接字绑定监听接受连接收发数据关闭客户端:创建套接字连接收发数据关闭3、编程方法TCP/TP流式套接字的编程步骤 (客户端程序 ) 1)加载套接字库2)创建套接字(socket)。3)向服务器发出连接请求(connect)。4)和服务器端进行通信(send/recv)。5)关闭套接字。socket-connect-send/recv 我的客户端所要用到的主要函数是recv()函数recv()函数和WSARevc()函数用于接受数据。recv()函数声明如下:int recv(SOCKET s,char FAR* buf,int len,int flags);send()函数send()和WSASend()函数用于发送数据。send()函数声明如下:int send(SOCKET s,const char FAR* buf,int len,int flags);connect()函数connect()函数实现连接服务器功能。该函数声明如下:int connect(SOCKET s,const struct sockaddr FAR* name,int namelen);closesocket()函数closesocket()函数关闭套接字,释放后占资源。该函数声明如下:int closesocket(SOCKET s);4、主要内容及对其分析客户端源程序#include #include#include #include #include #pragma comment(lib,ws2_32.lib)int main()WSADATA wsaData;SOCKET ClientSocket;SOCKADDR_IN ServerAddr;int ServerPort=4000;char ServerIPAddr50=127.0.0.1;char*SendData=I am a client.n please send me a string of data!;char ReceiveBuffer1024;int SendLength=-1;int Result=-1;if(Result=WSAStartup(MAKEWORD(2,2),&wsaData)!=0)printf(WSAStartup failed with error%dn,Result);return 0;/1.socket建立客户端流式套接字,返回套接字号ClientSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);/创建客户端套接字if(ClientSocket0)printf(socket failed with error%dn,WSAGetLastError();return 0;memset(&ServerAddr,0,sizeof(ServerAddr);ServerAddr.sin_family=AF_INET; /地址簇ServerAddr.sin_port=htons(ServerPort);/同服务器端端口地址ServerAddr.sin_addr.s_addr=inet_addr(ServerIPAddr);/服务器端IP地址/2.将套接字与服务器建立连接Result=connect(ClientSocket,(SOCKADDR*)&ServerAddr,sizeof(ServerAddr);/将套接字与服务器建立连接if(Result0)printf(connect failed with error%dn,WSAGetLastError();return 0;/3.发送请求给服务器SendLength=send(ClientSocket,SendData,strlen(SendData),0);/在套接字上发送信息if(SendLength0)printf(send failed with error%dn,WSAGetLastError();return 0;el
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号