套接字编程.doc

上传人:asd****56 文档编号:70333027 上传时间:2023-01-19 格式:DOC 页数:6 大小:177KB
返回 下载 相关 举报
套接字编程.doc_第1页
第1页 / 共6页
套接字编程.doc_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《套接字编程.doc》由会员分享,可在线阅读,更多相关《套接字编程.doc(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、华 北 电 力 大 学 实 验 报 告华北电力大学实 验 报 告| 实验名称 套接字编程 课程名称 TCP/IP网络与协议| 专业班级:网络0801 学生姓名:严飞 学 号:200809030125 成 绩:指导教师:李丽芬老师 实验日期:2011.4 基于Winsock的服务器/客户端通信一.实验目的 1掌握客户机与服务器的通信原理。2掌握WinSocket编程技术。实现两机间的通信。二.实验要求利用Visual C+语言中的Winsock控件,采用TCP方式实现一个服务器与客户端间的通信程序。三.实验设计1如果创建客户端应用程序,就必须知道服务器计算机名或者 IP 地址,还要知道进行“侦听

2、”的端口,然后调用 Connect 方法。 2如果创建服务器应用程序,就应设置一个收听端口并调用 Listen 方法。当客户端计算机需要连接时就会发生 ConnectionRequest 事件。为了完成连接,可调用 ConnectionRequest 事件内的 Accept 方法。 3客户机/服务器模型的工作流程4建立连接后,任何一方计算机都可以收发数据。为了发送数据,可调用 SendData 方法。实验流程图如下:5 基于TCP的应用编程实现过程TCP实现方式中,在服务器端设立了一个Winsock控件(侦听套接字)来监听客户端的连接,如果有连接请求到达时,服务器再创建一个新的Winsock控

3、件(连接套接字)来与客户端进行通信,而原来的Winsock控件(侦听套接字)仍处于监听状态,等待新的客户连接请求。四.实验步骤1准备工作1)使用VC+6.0App Wizard创建一个Win32控制台应用程序。2)记住要设置选项,以便添加对MFC的支持3)打开文件stdafx.h,添加语句:#include4)在winsock2.h之后,还要包含conio.h和iostream,h2服务器端的程序 1)使用WSAStartup()初始化Winsock库。WSADATA WSAData;/WSADATA结构将有WSAStartup函数来填充if(WSAStartup(MAKEWORD(2,2),

4、&wsaData) != 0) coutWinsock load failed endl; return; 2)使用socket()创建一个IPPROTO_TCP类型的侦听套接字。sListen = socket(AF_INET, SOCK_STREAM, 0); if (sListen = INVALID_SOCKET) coutsocket failed: WSAGetLastError()endl; return; 3)使用htons ()/htonl ()获取主机套接字和IP地址信息。 serveraddr.sin_port=htons(unsigned short)atoi(argv

5、1); /sin_port成员指定了将要分配给套接字的端口号atoi(argv1serveraddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY); /sin_addr.S_un.S_addr给出了套接字的主机的IP地址 4)使用bind()为套接字关联本地地址。int nBind;nBind=bind(sock,(sockaddr*)&serveraddr,sizeof(serveraddr);/sock是调用socket()函数的返回值,(sockaddr*)&serveraddr是一个WinSock地址结构(指针形式),sizeof(serveraddr)

6、是该地址结构的长度。if(nBind=SOCKET_ERROR)cout Socket Bind失败!endl;return; 5)使用listen()设置套接字进入监听状态,为到达的连接指定一个backlog。int nListen;nListen=listen(sock,SOMAXCONN);/为了能够探测到客户机的连接请求,建立侦听函数,sock是用来进行侦听的套接字。 if(nListen=SOCKET_ERROR) coutSocket Listen 失败!endl;return; 6)使用socket()创建一个IPPROTO_TCP类型的连接套接字。SOCKET tempsock

7、;/创建连接套接字 sockaddr_in tempaddr;/请求连接的套接字地址 7)使用accept()接受请求的连接。tempsock=accept(sock,(sockaddr*)&tempaddr,&templen);/sock是调用listen()函数的侦听套接字,后两个返回所连接的客户机套接字的地址和长度。 if(tempsock=INVALID_SOCKET) cout Socket Accept 失败!=10)closesocket(tempsock);/关闭连接套接字continue; Param.sock=tempsock; Param.addr=tempaddr;DW

8、ORD dwThreadId; CreateThread(NULL,0,ServerThread,&Param,0,&dwThreadId); 9)利用连接套接字与客户端进行数据传输 10)使用closesocket()关闭套接字连接 closesocket(sock);/关闭侦听套接字 11)使用WSACleanup()释放Winsock库。 WSACleanup();3客户端程序 相对于服务器而言,客户端程序比较简单,只需建立一个连接,然后便可以传送数据,使用函数原理与服务器端类似 。 1)使用WSAStartup()初始化Winsock库。 2)使用socket()创建一个IPPROTO

9、_TCP类型的套接字。 3)使用gethostbyname()/gethoustbyaddr()获取主机信息。 4)使用connet()连接到服务器。 5)使用send()/recv()发送和接收数据,直到TCP通信结束。 6)使用closesocket()关闭套接字连接。 7)使用WSACleanup()释放Winsock库。五实验结果1服务器端显示2客户端显示六. 实验总结实验中注意的问题:1在建立客户端与服务器端连接的时候要仔细,不能缺少任何一步,否则就无法建立连接了。2注意编程平台不同,引进数据包文件的差异。3通过与UDP通信的比较,掌握两者之间的异同。4注意在一台机器上实现通信时需要使用回环地址127.0.0.1.七.心得体会通过本次试验,学会了服务器/客户端进行通信的设计,并且了解了这个程序设计的原理。如果仅有一台电脑,也仍然能够进行Winsock编程。可以使用本地回环地址127.0.0.1.这样的话,如果有一个TCP服务器运行在你的电脑上,那么运行在此电脑上的客户程序使用这个回环地址,即可连接到服务器。第 页 共 页

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

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁