1、摘 要UDP(User Datagram Protocol)是一种无连接协议,与TCP操作不同,计算机间并不需要建立一个连接,同时,一个UDP应用可同时作为应用的客户或服务器方。本设计采用VB作为开发工具,利用Socket套接字实现了基于UDP协议的应用程序通信,并完成了对等聊天程序的设计。关键词: UDP;Socket;数据报;通信 目 录1 课题描述12 设计过程2 2.1 主窗体设计22.2 与远端聊天程序互连22.3 向远端发送消息42.4 接收远端程序发送的消息53 测试6总结7参考文献81 课题描述随着社会发展,Internent的迅速普及,人们对实时通信的要求越来越迫切,需求日益
2、增加,网络聊天已经成为了一大时尚,不少人都有这样的经历。用户数据报协议(UDP)是一个无连接协议,使用这种协议时,并不需要在两台计算机之间建立固定的连接,也就是说,通信双方没有服务器和客户机之分,它们之间进行的是对等通信。所以它的优势很明显。是现代通信不可或缺的一部分。本课题利用Socket 套接字实现主机之间的数据通信,并设计一个网上聊天程序,实现基于UDP的通信。开发工具:Visual Basic2 设计过程本次设计的基于UDP的网上聊天程序易于实现两台计算机之间建立固定的连接,适合一般用途通信的需要。2.1 主窗体设计首先,创建一个新项目,接下来设计主窗体如图2.1所示。并在窗体上添加一
3、个运行时不可见的winsock 控件。图2.1 主窗体2.2 与远端聊天程序互连当主窗体加载时,我们首先将本地计算机的IP地址填充到Connect with IP文本框中作为默认值。代码如下:Private Sub Form_Load()ShowtxtRemoteIP = Winsock1.LocalIPEnd Sub当用户填写远端聊天程序的IP地址后,及双方事先约定好的端口号时(注意:本地控件的RemotePort属性应该设为对方控件的LocalPort属性,这一点对于对方来说也一样),单击Connect按钮就可以实现互连。此外我们不将远端聊天程序称为服务器,因为在聊天过程中双方的地位是对等
4、的。单击Connect按钮时的处理代码如下所示:Private Sub cmdConnect_Click()On Error GoTo ErrHandlerWith Winsock1 Set the remotehost property .RemoteHost = Trim(txtRemoteIP) Set the remoteport property. This should be equal to the localhost property of the remote machine. .RemotePort = Trim(txtRemotePort) The localport p
5、roperty cannot be changed,so check if it has already been set. If .LocalPort = Empty Then .LocalPort = Trim(txtLocalPort) Frame2.Caption = .LocalIP .Bind .LocalPort End IfEnd WithMake sure that the user cant changethe local porttxtLocalPort.Locked = TrueShow the current status of the connection inth
6、e status barStatusBar1.Panels(1).Text = Connected to & Winsock1.RemoteHost & Frame1.Enabled = TrueFrame2.Enabled = TrueLabel4.Visible = TrueText2.SetFocusExit SubErrHandler:MsgBox Winsock failed to establish connection with remote server, vbCriticalEnd Sub 在cmdConnect_Click过程中,UDP对等聊天程序执行了如下的几个步骤:(1
7、) 读取Connect with IP 文本框内容填充WinSock控件的RemoteHost属性。(2) 读取Remote Port 文本框内容填充WinSock控件的RemotePort属性。(3) 读取Local Port 文本框内容填充WinSock控件的LocalPort属性。(4) 改变对话内容输入栏的标题提示。(5) 调用WinSock控件的Bind方法绑定本地端口。(6) 将连接状态在状态栏上显示出来。(7) 将本地端口值锁定,不允许用户再做更改。2.3 向远端发送消息当用户在窗口下部的文本框中输入了一行文本并敲击回车键时,我们的程序就应该将用户所输入的内容及时发送给远端的聊天
8、程序(而且应该发向已经指定的RemotePort 端口),这个过程是在Text2文本框的KeyPress事件中处理完成的(因为我们需要从中检测用户敲击的是否回车键),如下所示:Private Sub Text2_KeyPress(KeyAscii As Integer)The position of the last linefeed within the textStatic Last_Line_Feed As LongThe new line of textDim New_Line As StringReset the position of the last line feed if t
9、heuser has clear the chat windowIf Trim(Text2) = vbNullString Then Last_Line_Feed = 0If the user pressed Enter.If KeyAscii = 13 Then Get the new line of text New_Line = Mid(Text2, Last_Line_Feed + 1) Save the position of the current linefeed Last_Line_Feed = Text2.SelStart Send the new text across t
10、he socket Winsock1.SendData New_Line StatusBar1.Panels(2).Text = Sent & (LenB(New_Line) / 2) & bytes End IfEnd SubText2_KeyPress 所做的工作就是首先检测用户敲击的是否是回车键,如果是,则获取用户最新输入的一行文本,然后调用WinSock控件的SendData方法将其发送出去并更新状态栏显示的连接状态。 2.4接收远端程序发送的消息当远端程序有消息发送过来时,系统会在固有的端口上提供缓冲并通知我们的程序,此时WinSock控件的DataArrival事件将被触发,如下所
11、示:Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)New_Text is the text that has just arrivedfrom across the socketDim New_Text As StringGet the new textWinsock1.GetData New_TextShow the new textText1.SelText = New_TextFrame1.Caption = Winsock1.RemoteHostIP,Show the byte size of this transm
12、ission in the statusbarStatusBar1.Panels(2).Text = Recieved & bytesTotal & bytes End Sub83 测试运行程序,Connect with IP中将自动获取本地IP;在Local Port 中填入一个端口号,如1000(非系统占用);在Remote Port 中填入要连接的计算机的通讯接收端口号 如1000。 本实验是在一台计算机上测试,如要进行两台计算机的通讯,则在此填入另外接收计算机的接收通讯端口号。单击Connect,在文本框内输入消息,按回车键,消息成功发送,如图3.1所示,可以实现通信。 图3.1 测试
13、界面总 结课程设计的过程是艰辛的,但是收获却是很大的。这次课程设计我主要是应用以前学习的网络编程以及vb的一些只是,综合起来才完成了这个网络通讯的软件,虽然软件很小,但是付出却是艰辛的。首先,综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更进一步的理解和认识,再次,我在课程设计中碰到了很多的问题,我通过查阅相关书籍,资料,通过自己钻研,特别是得到了李征老师的谆谆教导,李老师给予了我很大的帮助,不仅给了我思路上的开阔,还让我认识到了自己对以前所学知识的不足方面。随着社会发展,internent的迅速普及,以及飞速发展,人们对实时通信的要求越来越迫切,需求日益增加,网
14、络聊天已经成为了一大时尚,不少人都有这样的经历。用户数据报协议(UDP)是一个无连接协议,使用这种协议时,并不需要在两台计算机之间建立固定的连接,也就是说,通信双方没有服务器和客户机之分,它们之间进行的是对等通信。所以它的优势很明显。是现代通信不可或缺的一部分。这次的课程设计我主要应用所学,通过在vb编程环境下,运用流式套接字知识,进行基于UDP的网上聊天软件的设计,它易于实现两台计算机之间建立固定的连接,这是它的一大优势。当然,通过这次课程设计,我也发现了自身的很多不足之处,在以后的学习中,我会不断的完善自我,不断进取,能使自己在网络编程这方面有一个大的发展。参考文献1 萧秋水,文娟.网络编程之vb篇.北京.清华出版社.20012 方敏,张彤.网络应用程序设计.西安.西安电子科技大学出版社.20053 黄超.indows下的网络编程.北京.人民邮电出版社.2003