《winsock编程》由会员分享,可在线阅读,更多相关《winsock编程(11页珍藏版)》请在金锄头文库上搜索。
1、实验三 WinSock 编程1、实验目的1 熟悉 C+/VB 的基本操作。2 基本了解基于对话框的 windows 应用程序的编写过程。3 对于 Windows Socket 编程建立初步概念。2、实验设备1.两台计算机; 2.网卡,网络环境; 3.Windows 98/2000 操作系统,Turbo C/C+/VB。3、实验原理(一)Windows Socket 和套接口的基本概念网际协议(Internet Protocol,IP)是一种用于互联网的网络协议,已广为人知。它可广泛用于大多数计算机操作系统上,也可用于大多数局域网 LAN(比如办公室小型网络)和广域网 WAN(比如说互联网) 。
2、从它的设计看来,IP 是一个无连接的协议,并不能保证数据投递万无一失。两个上层协议(TCP 和 UDP)依赖 IP 协议进行数据通信。如果希望在 Microsoft Windows 下通过 TCP 和 UDP 协议建立网络应用程序,则需要使用 Winsock 套接口编程技术。套接口,就是一个指向传输提供者的句柄。Win32 中,套接口不同于文件描述符,所以它是一个独立的类型SOCKET。Windows Sockets 描述定义了一个 Microsoft Windows 的网络编程界面,它是从 Unix Socket 的基础上发展而来的,为 Windows TCP/IP 提供了一个 BSD 型的
3、套接字规范,除与 4.3BSD Unix Sockets 完全兼容外,还包括一个扩充文件,通过一组附加的 API 实现 Windows 式(即事件驱动) 的编程风格;而 Winsock 则是在 Microsoft Windows 中进行网络应用程序设计的接口。Windows 在 Internet 支配域中的TCP /IP 协议定义了 Winsock 网络编程规范,融入了许多新特点。使用 Socket 的目的是使用户在网络协议上工作而不必对该网络协议有非常深入的了解。此外,编写的程序还可被迅速地移植到任何支持 Socket 的网络系统中去。 Winsock 提供了一种可为指定传输协议打开、计算和
4、关闭会话的能力。在 Windows 下,TCP/IP 上层模型在很大程度上与用户的 Winsock 应用有关;换言之,用户的 Winsock 应用控制了会话的方方面面,必要时,还会根据程序的需要格式化数据。套接口有三种类型:流式套接口、数据报套接口及原始套接口。流式套接口定义了一种可靠的面向连接的服务(利用 TCP 协议) ,实现了无差错无重复的顺序数据传输。数据报套接口定义了一种无连接的服务(UDP 协议) ,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠和无差错。原始套接口允许对低层协议如 IP 或 ICMP 直接访问,主要用于新的网络协议实现的测试等。面向连接服务器处理的请求往
5、往比较复杂,不是一来一去的请求应答所能解决的,而且往往是并发服务器。使用面向连接的套接口编程,可以通过图 1.1 来表示。图 1.1无连接服务器一般都是面向事务处理的,一个请求、一个应答就完成了客户程序与服务程序之间的相互作用。若使用无连接的套接口编程,程序的流程可以用图 7.2 表示。套接口工作过程如下:服务器首先启动,通过调用 socket()建立一个套接口,然后调用bind()将该套接口和本地网络地址联系在一起,再调用 listen()使套接口做好侦听的准备,并规定它的请求队列的长度,之后,调用 accept()来接收连接。客户在建立套接口后就可调用connect()和服务器建立连接。连
6、接一旦建立,客户机和服务器之间就可以通过调用 read()和 write()来发送和接收数据。最后,待数据传送结束后,双方调用 close()关闭套接口。在网络编程中,掌握端口的概念十分重要。端口:基于 TCP/IP 协议的网络中,计算机都分配有一个 IP 地址,用一个 32 位二进制数来表示,正式的称呼是“Ipv4 地址” 。客户机需要通过 TCP 或 UDP 和服务器通信时,必须指定服务器的 IP 地址和服务端口号。另外,服务器打算侦听接入客户机请求时,也必须指定一个 IP 地址和一个端口号。图 7.2 在选择端口时,应特别小心,因为有些可用端口号是为“已知的” (即固定的)服务保留的,如
7、文件传输协议和超文本传输协议,即 FTP(21 号端口)和 HTTP(一般为 8080 端口) 。 “已知的协议” ,即固定协议,采用的端口由“互联网编号分配认证(IANA) ”控制和分配,RFC 1700 中说明的编号。从本质上说,端口号可分成 3 类:“已知”端口、已注册端口、动态和(或)私用端口。 “已知”端口 01023,由 IANA 控制,是在 UNIX 中为固定服务保留的。 已注册的端口 102449151,由 IANA 列出来的,供普通用户的普通用户进程或程序使用。 动态和(或)私用端口 4915265535。普通用户应用应选择 102449151 之间的已注册端口,从而避免端口
8、号已被另一个应用或系统服务所用。此外,4915265535 间的端口可自由使用,因为 IANA 这些端口上没有注册服务。到 1992 年为止,人们所熟知的端口号介于 1255,而 2561023 的端口号通常由 Unix系统占用,以提供一些特定的 Unix 服务。现在 IANA 管理 11023 之间所有的端口号。客户端通常对它所使用的端口号并不关心,只需保证该端口号在本机上是惟一的就可以了。客户端口号又被称作临时端口号(即存在时间很短暂) 。这是因为它通常只是在用户运行该客户程序时才存在,而服务器则只要主机开着,其服务就运行。大多数 TCP/IP 实现给临时端口分配 10245000 之间的
9、端口号。大于 5000 的端口号是为其他服务器预留的(Internet 上并不常用的服务) 。(2)用 VB 环境中的 WINSOCK 控件控件1.WinSock 控件的主要属性LocalHostName 属性 本地机器名LocalIP 属性 本地机器 IP 地址LocalPort 属性 本地机器通信程序的端口(0 sckClosed ThenWinsock1.CloseEnd IfWinsock1.Accept requestIDEnd SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)Dim s As StringWi
10、nsock1.GetData sText1.Text = Text1.Text + s + vbCrLfEnd SubForm2Private Sub Command1_Click()Winsock1.RemoteHost = Text1.TextWinsock1.RemotePort = Val(Text2.Text)If Winsock1.State = sckClosed ThenWinsock1.ConnectEnd IfEnd SubPrivate Sub Command2_Click()Dim t As String, tm As Stringt = Timetm = Text6.
11、Text + + t + vbCrLf + Text4.TextWinsock1.SendData tmText3.Text = Text3.Text + Text6.Text + t + vbCrLf + Text4.Text + vbCrLfText4.Text = Text4.SetFocusEnd SubPrivate Sub Command3_Click()Text5.Visible = TrueLabel4.Visible = TrueCommand4.Visible = TrueForm2.Width = 11685Text5.Text = Text3.TextEnd SubPrivate Sub Command4_Click()Form2.Width = 7860Text5.Visible = FalseLabel4.Visible = FalseCommand4.Value = FalseEnd SubPrivate Sub Form_Load()Form2.Width = 7860End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)Dim s As StringWinsock1.GetData sText3.Text = Text3.Text + s + vbCrLfEnd Sub