- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
成 绩 评 阅 人 评阅日期
TCP/IP课程设计
设计题目:基于套接字的客户机/服务器程序设计
班 级:
学 号:
姓 名:
指导老师:
年 月 日
基于套接字的客户机/服务器程序设计
一.设计目的:
理解客户机/服务器模型的工作原理;
掌握套接字的概念;
掌握基于套接字的面向连接和无连接客户机/服务器程序的设计原理和相关的WinSock API函数;
掌握基于TCP和UDP的程序设计方法。
二.设计内容:
基于TCP的应用编程:编写一个Client/Server程序对,服务器程序负责接收客户机进程的连接请求,并在服务器进程与客户机进程之间建立通信连接,然后接收客户机进程的传送数据并将其显示在服务器端,同时将欢迎信息发送给客户机进程,最后关闭该客户机进程的连接;客户机进程首先提出对指定服务器的连接请求,建立连接后向服务器进程发送已经建立连接的数据信息,同时接收服务器进程发送过来的数据并显示在客户端。采用WinSock API实现代码。
基于UDP的应用编程:实现一个基于UDP的客户机/服务器程序,通过设定不同的命令行参数来确定应用进程的不同角色,即充当客户机进程还是服务器进程。当两个进程运行后,彼此之间可以轮流发送消息,对方接收后显示出来。
三.原理分析:
(一)套接字的概念:
套接字(Socket) 1. Socket的出现,使得程序员可以很方便的访问TCP/IP,从而开发各种网络应用的程序 2. 套接字存在于通信区域中,通信区域也叫地址族,他是一个抽象的概念,主要用于通过套接字通信的进程的共有特性综合在一起。套接字通常只与同一个区域的套接字交换数据。 套接字的类型 1. 流式套接字(SOCK_STREAM) 提供面向连接的,可靠的数据传输服务,数据无差错,无重复的发送,且按发送的顺序接收,基于TCP协议 2. 数据保式套接字(SOCK_DGRAM) 提供无连接的服务,数据包以独立包形式发送,不提供无错误的保证,数据可能丢失或重复,且接收顺序混乱,基于UDP协议
四.总体设计:
(一)基于TCP(面向连接)的Socket编程服务器端顺序: 1. 加载套接字库 2. 创建套接字(socket) 3. 将套接字绑定到一个本地地址和端口上(bind) 4. 将套接字设为监听模式,准备接收客户请求(listen) 5. 等待客户请求的到来;当请求带来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept) 6. 用返回的套接字和客户端进行通信(send/recv) 7. 返回,等待另一个客户请求 8. 关闭套接字(closesocket) 客户端程序: 1. 加载套接字库 2. 创建套接字(socket) 3. 向服务器发送连接请求(connect) 4. 和服务器端进行通信(send/receive) 5. 关闭套接字(closesocket) 基于UDP(面向无连接)的socket编程 服务器端(接收端)程序: 1. 加载套接字库 2. 创建套接字(socket) 3. 将套接字绑定到一个本地地址和端口上(bind) 4. 等待接收数据(recvfrom) 5. 关闭套接字(closesocket) 客户端(发送端)程序 1. 加载套接字库 2. 创建套接字(socket) 3. 向服务器发送数据(sendto) 4. 关闭套接字(closesocket)server.cpp:
#includewinsock2.h
#includeiostream
using namespace std;
#include string.h
void main()
{
//加载套接字(winsock)库
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 ); //版本号为2.2
err = WSAStartup( wVersionRequested, wsaData );
if ( err != 0 ) {
return;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( );
return;
}
//创建套接字
SOCKET sockServer=socket(AF_INET,SOCK_STREAM,0)
文档评论(0)