Winsock实验
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
从图中看出Socket是应用层与TCP/IP协议 族通信的中间软件层,是一组接口,对用户来 说就是让Socket去组织数据,以符合指定的协 议。 套接口,就是一个指向传输提供者的句柄。 Win32中,套接口不同于文件描述符,所以它是 一个独立的类型——SOCKET。套接字接口 (SocketInterface)就是一种API , API实现的 作用是把API定义的具体操作和对象映射到协议 定义的抽象服务集上。
套接口工作原理
由socket提供三种类型的套接字知道服务方式主要 有两种,一种是面向连接,一种是无连接的。面向连接 服务器处理的请求往往比较复杂,不是一来一去的请求 应答所能解决的,而且往往是并发服务器。无连接服务 器一般都是面向事务处理的,一个请求、一个应答就完 成了客户程序与服务程序之间的相互作用。使用面向连 接的套接口编程,可以通过图来表示。
socket提供三种类型的套接字:
1.流式套接字(SOCK_STREAM)
提供一个面向连接的、可靠的数据传输服务, 数据无差错、无重复地发送,且按发送顺序接 收。 内设流量控制,避免数据流超限;数据被看作 是字节流,无长度限制。 文件传输协议(FTP)即使用流式套接字。
2.数据报式套接字(SOCK_DGRAM) 提供一个无连接服务。 数据报以独立包形式被发送,不提供无错保证,数 据可能丢失或重复,且接收顺序混乱。 网络文件系统(NFS)使用数据报式套接字。 3.原始式套接字(SOCK_RAW) 该接口允许对较低层协议,如IP、ICMP直接访问。 常用于检验新的协议实现或访问现有服务中配置的 新设备
(1)应用VisualC++中MFCCSocket类,实现网络数 据传输。 (2)制作实用的局域网数据传输程序。
Winsock和套接口概念
基本概念
网际协议(Intemet Protocol,IP)是一种用于互联 网的网络协议。从它的设计看来,它是一个无连接的协 议,并不能保证数据投递万无一失。两个上层协议(TCP 和UDP)依赖IP协议进行数据通信。Winsock规范定义如 何使用API与TCP/IP协议族连接,以实现网络应用程序 间的通讯。多个应用程序通过winsock中的API实现相互 之间通讯。如图示 如果希望在Microsoft Windows下通过TCP和UDP协 议建立网络应用程序,则需要使用Winsock套接口编程 技术。
} 至此,代码全部添加完毕。
第五步:调试服务器和客户端实现通信,过 程如下如,先调试服务器端,调试运行成功 显示下图:
同样调试运行客户端成功后显示
本实验是实现两台联网的电脑之间的点 对点之间通信,首先要保证两台电脑正常联 网,然后首先点击服务器界面中的侦听按钮, 保持侦听状态,然后在客户端的服务器ip地 址中输入运行服务器端的电脑的ip地址,就 可以实现两台电脑间的通信连接,然后就可 以实现数据发送。运行结果如图示
各个控件的ID如下表,并且在对话框视 图中点击右键,选择建立类向导选项,用该 工具对控件添加变量。注意控件 IDC_CONTENT添加两个变量。
然后把这几个控件全部添加完毕点击Message maps 菜单,将侦听和发送按钮添加clicked功能,两个按钮 全部添加完后点击确定。
完成后,在Server2Dlg.cpp中将BOOL CServer2Dlg::OnInitDialog()函数末尾添加 语句,,其如下所示: m_send.EnableWindow(FALSE);//使发送 按钮变灰 return TRUE;//return TRUE unless you //set the focus to a control 注意:这个语句作用使发送按钮失效,以免还 未连接用户就点击发送,发生不可预计的错误。
在server.cpp中添加头文件: #include "server2Dlg.h" 在server2Dlg.h里添加: 头文件: #include "server.h" public: void ShowMsg(); void ShowAccept(); private变量: Cserver m_server; Cserver m_recv;
然后在对话框的图像上双击“侦听”按钮,添 加如下代码A 在对话框图像上再双击“发送”按钮,添加如 下代码B
下面的步骤就是利用OnAccept和OnReceive函数 处理socket消息。首先,在server2工程的编辑界面中 点击右键,选创建类向导,在classname栏目里面找 到Cserver类,添加OnAccept和OnReceive函数并且 双击下面的Member function栏目,分别为两个函数 添加代码E和F,过程如图示
同样地,在client工程的工作区类视图中点击 右键,添加新类: Cclient它继承自CSocket。 在client.cpp中添加头文件: #include"client2Dlg.h“ 在server2Dlg.h里添加: 头文件: #include"Client.h" public: void ShowMsg(); private:Cclient m_client;
当出现Dialห้องสมุดไป่ตู้g以后,编辑界面,使其如图所示 且对控件点击右键,选择属性选项,把每个控 件的ID改掉。界面如图示。
前两步完成后,同样在client2Dlg.cpp中将BOOL CClient2Dlg::OnInitDialog()使末尾添加语句,其如 下所示: m_send.EnableWindow(FALSE);//使发送按钮变灰 return TRUE;//return TRUE unless you //set the focus to a control 注意:这个语句作用使发送按钮失效,以免还未连接用 户就点击发送,发生不可预计的错误。
第一步:构建服务器端
打开VC++,单击新建菜单,先建立一MFC,选 dialogBased,工程名server2,下一步中选择基本对 话框,如图所示。注意在下一步过程中注意勾选 windows socket
然后一直下一步,确定,完成就可以了。 确定后出现Dialog,编辑界面,使其如图所示且对 控件点击右键,选择属性选项,把每个控件的ID改掉 (控件ID就是每个控件的名字,要改成有意义的,以便 将来管理)。
为了在程序中更自由地处理CSocket得到的消息, 必须新建CSocket的派生类:在server2工程的工作区 类视图中点击右键,添加新类: Cserver,父类为 CSocket。NewClass对话框如下图所示
添加新类Cserver 后,需要在资源文件server.cpp文 件和server2Dlg.h 文件头文件或者成员变量添加,如 图示
Winsock实验
主要内容: 1.实验目的和要求 2.Winsock和套接口概念 3.套接口工作原理 4.点对点通信实验
实验目的和要求
【实验目的】 (1)熟悉Visual C++的基本操作。 (2)基本了解基于对话框的windows应用程序的编写 过程。 (3)对于Windows Socket编程建立初步概念。 【实验要求】
该步完成后,可以为CServer2Dlg类添加public成员 函数ShowAccept()和ShowMsg():在 server2Dlg.cpp中添加下面函数:ShowAccept()和 ShowMsg(),代码分别为G和H:
服务器端代码添加完毕
第二步:构建客户端
按照第一步的步骤再打开一个VC,建立客 户机工程,工程名称为client2,各个控件的ID 如下表
其中socket()、bind()、listen()、accept()、
send()、recv()、sendto()、recvfrom()、 closesocket()函数是TCP和UDP通信常使用的API函数。
套接口工作原理
套接口工作原理
套接口工作过程如下:服务器首先启动,通过调用 socket()建立一个套接口,然后调用bind()将该套 接口和本地网络地址联系在一起,再调用listen() 使套接口做好侦听的准备,并规定它的请求队列的 长度,之后,调用accept()来接收连接。客户在建 立套接口后就可调用connect()和服务器建立连接。 连接一旦建立,客户机和服务器之间就可以通过调 用read()和write()来发送和接收数据。最后,待 数据传送结束后,双方调用close()关闭套接口。
双击对话框图像上的“连接”按钮,添加代码 C 双击发送按钮,添加代码D 通过以上操作,我们建立了CSocket,主 机、客户机建立连接后的消息发送代码也添加 完成了,但是还缺少使其工作的消息机制。
同样地,在client工程的编辑界面中点击 右键,选创建类向导,在classname栏目里面 找到Cclient类,添加OnReceive函数并且双 击下面的Member function栏目,在client工 程中添加OnReceive函数代码 I: 并在client2Dlg.cpp中添加 ShowMsg()函数 代码J:
最后即在对话框销毁的时候,关闭Socket连接,释放 资源。在client2工程中见图。
在OnDestroy() 函数中添加如下代码: void CClient2Dlg::OnDestroy() { CDialog::OnDestroy();
// TODO: Add your message handler code here m_client.Close();
套接口工作原理
点对点通信实验
下面以一个最简单的点对点通信的聊天程序为例 说明:其中代码ABCDEFGHIJ 参见附属word文档 客户机/服务器模式是socket点对点网络程序 典型的模式。它用到的方法也是面向连接TCP连接 的套接字MFC典型方式。 其工作过程是:服务器首先启动,创建套接字 后等待客户的连接;客户启动以后,创建套接字, 然后和服务器建立连接;连接建立后,客户机和服 务器可以通过建立的套接字连接进行信息通信。
套接口工作原理
对于以上的套接口工作过程我们用VC++中的 CSockct类进行网络二进制数据通信的连接 ,主 要构造的过程如下表,我们实验过程也是按照表的 过程进行的,构建流程如下表所示。 注意事项:利用cArchive类进行网络数据传 输的操作固然方便直观,但是如果编写的程序是和 别人的程序进行通信的话,就要注意对方的程序是 否也用了CArchive类,否则会造成数据相互不能 识别。