课程设计基于CS结构的套接字程序设计(TCP)_第1页
课程设计基于CS结构的套接字程序设计(TCP)_第2页
课程设计基于CS结构的套接字程序设计(TCP)_第3页
课程设计基于CS结构的套接字程序设计(TCP)_第4页
课程设计基于CS结构的套接字程序设计(TCP)_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机网络课程设计 基于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结构的网络通信模型;掌握基

2、于c/s结构的windows socket tcp的程序设计方法。(2)基本要求按照c/s模型编写两个程序。一个为客户端程序,另一是服务器端程序;对于c/s两端都应输出必要的日志、出错或诊断信息。(3)小组人数:22、研究设想 能够实现当客户端向服务器端发送请求时,服务器端能够向客户端传送数据。3、相关理论 tcp是一种面向链接的,可靠的传输协议。tcp协议在网络层ip协议的基础上,向应用层用户进程提供可靠地全双工的数据流传输。并且通过创建的流式套接字实现服务器端与客户端的数据传送。4、预期结果 实现服务器端与客户端的数据传送。关键词流式套接字;tcp/ip;服务器/客户端; 正文1、理论基础

3、应用层通过传输层进行数据通信时,tcp会遇到同时为多个应用程序进程提供并发服务的问题。多个tcp连接或多个应用程序进程可能需要通过同一个tcp协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与tcpip协议交互提供了称为套接字(socket)的接口,区分不同应用程序进程间的网络通信和连接。网络化的应用程序在开始任何通讯之前都必需要创建套接字。socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入socket中,该socket将这段信息发送给另外一个socket中,使这段信息能传送到其他程序中。套接字,是支持tcp/ip的网络通信的基本操作

4、单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即tcp(the transmission control protocol)协议。2、设计方法及思路客户机与服务器建立连接,连接是通过申请的套接字实现的客户打开一个套接字并把它约束在一个端口上如果成功就相当于建立一个虚拟文件以后就可以在虚拟文件上写数据并通过网络向外传送,完成连接后就可以通信了。客户机

5、向服务器发送请求,打开一个连接后,客户机把请求消息送到服务器的停留端口上,完成提出请操作。服务器在处理完客户的请求之后,要向客户机发送响应消息。客户和服务器双方都可以通过关闭套接字来结束tcp/ip对话。当使用tcp/ip协议一发客户服务器服务程序时,服务器需要等待任意数量客户端的连接,以便以他们提供服务。客户端连接服务器时,必须先知道服务器的名称。在tcp/ip中,就是服务器的ip地址和端口号。bind()函数实现将服务器绑定到一个已知的名字上的功能。接下来要将服务器套接字设置为监听状态,这是通过listen()函数完成的。在监听状态下,如果客户端向服务器发起连接请求,服务器通过调用acce

6、pt()函数来接受该接连请求。服务器与客户端完成连接后,就可以进行数据通信了。对客户端来说,首先调用connect()函数向服务器发出连接请求。如果服务器接受了该请求,接下来就可以与服务器通信了。开发套接字应用程序时,首先应进行windows sockets的初始化,加载windows sockets的实现,然后创建套接字,对tcp套接字来说,需要在socket()函数或都wsasocket()函数中指明sock_stream套接字类型。当服务器和客户端通信结束时,关闭套接字,释放windows sockets的实现。流程如下:服务器:创建套接字绑定监听接受连接收发数据关闭客户端:创建套接字连

7、接收发数据关闭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()函数声明如下

8、: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 #includ

9、e #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(

10、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_fami

11、ly=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.发

12、送请求给服务器sendlength=send(clientsocket,senddata,strlen(senddata),0);/在套接字上发送信息if(sendlength0)printf(send failed with error%dn,wsagetlasterror();return 0;else printf(发送的信息:%sn,senddata);int receivelen;/4.接收服务器发来的数据domemset(receivebuffer,0,sizeof(receivebuffer);receivelen=recv(clientsocket,receivebuffer,

13、sizeof(receivebuffer),0);if(receivelen0)/在套接字上接受信息printf(receive failed with error %dn,wsagetlasterror();return 0;elseprintf(接收的信息:%sn,receivebuffer);while(receivelen!=0);if(closesocket(clientsocket)=socket_error)/关闭客户端套接字printf(closesocket failed with error%dn,wsagetlasterror();if(wsacleanup()=sock

14、et_error)/注销,并释放资源printf(wsacleanup failed with error%dn,wsagetlasterror(); system(pause); return exit_success;当客户端已经与服务器建立连接后,那么我的客户端程序就可以向服务器端发送数据请求,等待服务器响应,之后将接受客户端发送过来的数据,当完成数据接受后,可以关闭连接。5、实验结果及对其讨论服务器端发送数据,客户端能够成功地接受数据结论我们组这次做的课题的核心就是通过套接字在客户端和服务器之间建立连接,在建立连接之后实现客户端与服务器之间的通信,难点是在设计程序方面,既因为涉及相关函

15、数的调用,又因为我开始对套接字的应用不熟悉。这里面涉及些问题什么是套接字,什么是流式套接字,为什么用流式套接字。套接字,是支持tcp/ip的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程,它的存在是为了区别不同应用程序进程间的网络通信和连接。流套接字用于提供面向连接、可靠的数据传输服务,又因为该服务将保证数据能够实现无差错、无重复发送,并按顺序接收,所以用了流式套接字。我们做的课题不足之处是不能实现双向传送数据,还需要设计客户端向服务器端的数据传送,那么就需要在客户端程序中设计监听,接受服务器端的请求信息,以及向服务端发送数据这几部分。致谢真诚感谢黄彦老师您在我们课程设计阶段给予我们的指导和帮助,您的指导使我对网络专业知识方面有了更深的认识,并且您严肃的科学态

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论