实验三 基于TCP和UDP的Socket 编程.doc_第1页
实验三 基于TCP和UDP的Socket 编程.doc_第2页
实验三 基于TCP和UDP的Socket 编程.doc_第3页
实验三 基于TCP和UDP的Socket 编程.doc_第4页
全文预览已结束

下载本文档

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

文档简介

实验三 基于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的出现,使程序员可以很方便的访问TCP/IP,从而开发了各种网络应用程序。3) 随着UNIX的应用推广,套接字在编写网络软件中得到了普及,后来套接字又被引进了WINDOWS等操作系统,成为开发网络应用程序的非常有效快捷的工具。2、套接字类型1) 流式套接字(SOCK_STREAM),提供面向连接、可靠的数据传输服务,数据无差错、无重复发送,且按发送顺序接收(TCP服务)。2) 数据报式套接字(SOCK_DGRAM)提供无连接服务。数据包以独立包形式发送,不提供无错保证,数据可能丢失或重复,并且接受顺序混乱(UDP服务)。3) 原始套接字(SOCK_RAW)3、主要相关函数int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);MAKEWORD();int bind( SOCKET s, const struct sockaddr FAR *name, int namelen);int listen( SOCKET s, int backlog );SOCKET accept( SOCKET s, struct sockaddr FAR *addr, int FAR *addrlen);int send( SOCKET s, const char FAR *buf, int len, int flags );int recv( SOCKET s, char FAR *buf, int len, int flags );int connect( SOCKET s, const struct sockaddr FAR *name, int namelen );int closesocket( SOCKET s );int WSACleanup (void);任务一:创建TCP服务的服务端实验步骤:1)创建一个Win32 Console Application工程(Project),创建一个源文件(C+ Source File),命名为TcpSrv。2)创建主程序main函数,首先用WSAStartup()函数加载套接字库和版本协商。WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) return;if ( LOBYTE( wsaData.wVersion ) != 1 | HIBYTE( wsaData.wVersion ) != 1 ) WSACleanup( );return; 3)利用socket()函数创建一个套接字,同时定义一个SOCKET sockSrv描述符,用来接收socket()函数的返回值。 SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);4)定义一个SOCKADDR_IN类型的结构体变量,并进行初始化,然后利用bind()函数将该服务器和套接字绑定。/定义一个SOCKADDR_IN类型的结构体变量,并进行初始化SOCKADDR_IN addrSrv;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(SOCKADDR);5)利用listen()函数设置服务器的监听状态。listen(sockSrv,5); /5表示等待连接队列的最大数目。6)设计一个死循环等待连接的到来,并利用accept()函数接受客户端请求,accept()函数,需要保存客户端地址信息,所以需要在死循环的上面先定义一个客户端地址结构变量。利用send()函数发送数据到客户端,利用recv()函数接收客户端数据。最后需要注意的是服务器的监听和连接是通过不同的套接字来完成,所以在死循环中又定义了一个套接字用于连接客户端,并进行数据接收。/客户端地址结构变量SOCKADDR_IN addrClient;int len=sizeof(SOCKADDR);/死循环等待连接、接受客户端请求,建立连接。while(1)SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);/将客户端的地址存放到sendBuf中。char sendBuf100;sprintf(sendBuf, %s Welcome!, inet_ntoa(addrClient.sin_addr); send(sockConn,sendBuf,strlen(sendBuf)+1,0);char recvBuf100;recv(sockConn,recvBuf,100,0);printf(%sn,recvBuf);closesocket(sockConn);7)包含下面头文件,同时一个动态链接库文件Ws2_32.lib。#include #include 任务二:创建TCP服务的客户端实验步骤:为方便服务端和客户端程序的运行,要求客户端和服务端程序放在同一个工作区中实现。1)在上面的工作区中新增一个Win32 Console Application工程(Project),命名为TcpClient,然后创建一个源文件(C+ Source File),也命名为TcpClient。2)创建主程序main函数,首先用WSAStartup()函数加载套接字库和版本协商。WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) return;if ( LOBYTE( wsaData.wVersion ) != 1 | HIBYTE( wsaData.wVersion ) != 1 ) WSACleanup( );return; 3)利用socket()函数创建一个套接字,同时定义一个SOCKET sockClient描述符,用来接收socket()函数的返回值。 SOCKET sockClient =socket(AF_INET,SOCK_STREAM,0);4)定义一个SOCKADDR_IN类型的结构体变量,并进行初始化,然后利用connect()函数连接服务器,不需要与套接字绑定。/定义一个SOCKADDR_IN类型的结构体变量,并进行初始化SOCKADDR_IN addrCli;addrCli.sin_addr.S_un.S_addr=inet_addr(“127.0.0.1”);addrCli.sin_family=AF_INET;addrCli.sin_port=htons(6000);/向服务器发起连接请求connect(sockClient,(SOCKADDR*)& addrCli,sizeof(SOCKADDR);5)利用recv()、send()函数分别完成发送数据到客户端和从接收客户端数据。/接收并打印输出接收数据char recvBuf100;recv(sockClient,recvBuf,100,0);printf(%sn,recvBuf);/客户端向服务器发送数据s

温馨提示

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

评论

0/150

提交评论