实验三 基于TCP和UDP的Socket 编程

实验三 基于TCP和UDP的Socket 编程

ID:47162258

大小:53.50 KB

页数:4页

时间:2019-08-14

实验三 基于TCP和UDP的Socket 编程_第1页
实验三 基于TCP和UDP的Socket 编程_第2页
实验三 基于TCP和UDP的Socket 编程_第3页
实验三 基于TCP和UDP的Socket 编程_第4页
资源描述:

《实验三 基于TCP和UDP的Socket 编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实验三基于TCP和UDP的SOCKET编程实验时间:第12、13、14周(6课时)第一部分(2课时):基于TCP的SOCKET编程一、预习要求:(1)TCP服务(2)UDP服务(3)SOCKET套接字二、实验目的:(1)掌握TCP传输中服务端和客户端程序的设计(2)掌握TCP传输中服务端和客户端程序的设计(3)掌握SOCKET套接字的应用三、实验环境:VC++6.0四、实验内容:预备知识:1、套接字(socket)1)为了能方便的开发网络应用软件,由美国伯克利大学在UNIX上推出了一种应用程序访问通信协议的操作系统调用套接字(socket)。2)Socket的出现,使

2、程序员可以很方便的访问TCP/IP,从而开发了各种网络应用程序。3)随着UNIX的应用推广,套接字在编写网络软件中得到了普及,后来套接字又被引进了WINDOWS等操作系统,成为开发网络应用程序的非常有效快捷的工具。2、套接字类型1)流式套接字(SOCK_STREAM),提供面向连接、可靠的数据传输服务,数据无差错、无重复发送,且按发送顺序接收(TCP服务)。2)数据报式套接字(SOCK_DGRAM)提供无连接服务。数据包以独立包形式发送,不提供无错保证,数据可能丢失或重复,并且接受顺序混乱(UDP服务)。3)原始套接字(SOCK_RAW)3、主要相关函数intWSAS

3、tartup(WORDwVersionRequested,LPWSADATAlpWSAData);MAKEWORD();intbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);intlisten(SOCKETs,intbacklog);SOCKETaccept(SOCKETs,structsockaddrFAR*addr,intFAR*addrlen);intsend(SOCKETs,constcharFAR*buf,intlen,intflags);intrecv(SOCKETs,charFAR*buf,int

4、len,intflags);intconnect(SOCKETs,conststructsockaddrFAR*name,intnamelen);intclosesocket(SOCKETs);intWSACleanup(void);任务一:创建TCP服务的服务端实验步骤:1)创建一个Win32ConsoleApplication工程(Project),创建一个源文件(C++SourceFile),命名为TcpSrv。2)创建主程序main函数,首先用WSAStartup()函数加载套接字库和版本协商。WORDwVersionRequested;WSADATAwsaD

5、ata;interr;wVersionRequested=MAKEWORD(1,1);err=WSAStartup(wVersionRequested,&wsaData);if(err!=0){return;}if(LOBYTE(wsaData.wVersion)!=1

6、

7、HIBYTE(wsaData.wVersion)!=1){WSACleanup();return;}3)利用socket()函数创建一个套接字,同时定义一个SOCKETsockSrv描述符,用来接收socket()函数的返回值。SOCKETsockSrv=socket(AF_INET,SOCK_ST

8、REAM,0);4)定义一个SOCKADDR_IN类型的结构体变量,并进行初始化,然后利用bind()函数将该服务器和套接字绑定。//定义一个SOCKADDR_IN类型的结构体变量,并进行初始化SOCKADDR_INaddrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);//利用bind()函数将该服务器和套接字绑定bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKA

9、DDR));5)利用listen()函数设置服务器的监听状态。listen(sockSrv,5);//5表示等待连接队列的最大数目。6)设计一个死循环等待连接的到来,并利用accept()函数接受客户端请求,accept()函数,需要保存客户端地址信息,所以需要在死循环的上面先定义一个客户端地址结构变量。利用send()函数发送数据到客户端,利用recv()函数接收客户端数据。最后需要注意的是服务器的监听和连接是通过不同的套接字来完成,所以在死循环中又定义了一个套接字用于连接客户端,并进行数据接收。//客户端地址结构变量SOCKADDR_INaddr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。