用Winsock实现点对点通信

2016-02-19 12:54 56 1 收藏

今天图老师小编要向大家分享个用Winsock实现点对点通信教程,过程简单易学,相信聪明的你一定能轻松get!

【 tulaoshi.com - 编程语言 】

Winsock控件是VB5.0的新增功能,它解决了以往应用VB编程时网络中应用程序之间无法实现点对点通信的难题。Winsock使用的TCP协议和UDP协议允许建立并保持一个到远程计算机上的连接,且可以在连接结束之前实时地进行数据交换。用户仅通过设置属性并借助事件处理就能够轻而易举地连接到一个远程的计算机上,而且只用两个命令就可以实现数据交换。
  使用TCP协议时,如果需要创建一个客户应用程序,就必须识别服务器的名称或IP地址。应用程序的通信端口随时都将仔细监测对方发出的消息,这是系统进行可靠连接的保证。一旦连接发生,任何一方都可以通过SendData发送和接收数据,并借助GetData把自己的数据分离出来。
  传送数据时,需要先设定客户机的LocalPort属性,服务器则只需要把RemoteHost属性设定为客户机以太网的地址,并设定与客户机LocalPort属性相同的端口地址,借助SendData方法开始发送消息。客户机则在GetData事件中通过DataArrival事件分离出发送的信息。
  一个Winsock控件可以让本地计算机连接到远程的计算机上,同时使用UDP或TCP协议,两个协议都能创建客户机和服务器应用。
  使用Winsock控件时,通信的双方需要选定相同的协议。TCP协议适用于传送大容量、需要安全性保证的数据文件;而UDP协议适用于需要分别与很多下属通信,或者建立的连接比较多且为时变的情况,特别是在数据量很小的时候。设定时可以使用Winsock1.Protocol=sckTCPProtocol方法,首先要找到你的计算机的名称,并把它添入Winsock的LocalHost属性中。
  创建一个应用程序时,首先要确定你建立的是客户方应用还是服务器服务,只有建立的服务器应用开始工作,并进入监听状态时,客户应用程序才开始建立连接,进入正常的通信状态。笔者建立了一个应用程序,它的功能是当客户方的鼠标移动时,服务器应用程序上能够实时显示该鼠标的位置。下面是建立服务器应用的方法:
  1.创建一个新的标准EXE文件;
  2.加入一个Winsock控件;
  3.加入如下代码:
  PrivateSubFormLoad()
  tcpServer.LocalPort=1001
  tcpServer.Localhost=″servser″
  tcpServer.remotePort=1002
  tcpServer.Localhost=″klint″
  tcpServer.Listen
  EndSub
  ′连接检查
  PrivateSubtcpServerConnectionRequest
  (ByValrequestIDAsLong)
  IftcpServer.StatesckClosedThen
  tcpServer.Close
  tcpServer.AcceptrequestID
  EndSub
  ′发送数据
  PrivateSubfrmservermonsemove(x,y)
  tcpServer.SendData″x″&str(x)
  tcpServer.SendData″y″&str(y)
  EndSub
  建立客户应用的方法为:
  1.创建一个新的标准EXE文件;
  2.加入一个Winsock控件;
  3.加入两个TEXT框——txtx和txty;
  4.加入如下代码:
  PrivateSubFormLoad()
  tcpServer.LocalPort=1002
  tcpServer.Localhost=″klint″
  tcpServer.remotePort=1001
  tcpServer.Localhost=″servser″
  tcpServer.Listen
  EndSub
  ′连接检查
  PrivateSubtcpklintConnectionRequest
  (ByValrequestIDAsLong)
  Iftcpklint.StatesckClosedThen
  tcpklint.Close
  tcpklint.AcceptrequestID
  EndSub
  PrivateSubtcpClientDataArrival
  (ByValbytesTotalAsLong)
  DimstrDataAsString
  tcpklint.GetDatastrData
  ifleft(strData,1)=″X″then
  txtx.Text=strData
  else
  txty.Text=strData
  endif
  EndSub
  以上例程实现的是一个非常简单的点对点通信,在此基础上略加改造,可以形成功能复杂的实时计算机网络A-A交互通信系统,用于控制、图形仿真等。
  使用UDP协
  议建立对等通信和通过TCP建立客户/服务器通信的方法略有不同,它不需要建立客户和服务器,而是建立对等通信。此过程通过以下几步实现:
  1.设定Winsock的RemoteHost属性为一个通信的计算机名称;
  2.设定RemotePort为一个接口号;
  3.调用Winsock的Bind事件绑定本地的接口号。具体设定方法为:
  PrivateSubFormLoad()
  WithWinsock1
  .RemoteHost=″PeerB″
  .RemotePort=1001′远程连接号
  .Bind1002
  ′绑定的本地号
  EndWith
  EndSub
  程序的其它部分与TCP方法类似,即通过SendData和GetData方法发送或提取数据。UDP和TCP协议在使用中各有特点,如果灵活使用,可以得到很好的效果。令人欣慰的是,VB5.0中Winsock给我们提供了一种简便的数据传送方法,使我们得以轻松地实现网络点对点通信!->

来源:http://www.tulaoshi.com/n/20160219/1602382.html

延伸阅读
1. 问题的提出 以前做一个界面的时候经常会碰到这样的尴尬情况:希望保留各个独立的组件(类),但又希望它们之间能够相互通信。譬如Windows中的EXPlorer,我们希望鼠标点击左边是树型目录的一个节点,右边的文件浏览能及时列出该节点目录下的文件和子目录,类似这样一个简单的应用,假如只有一个类继续JFrame,而树型组件和浏览...
---- Windows下串行通信 ---- 与以往DOS下串行通信程序不同的是,Windows不提倡应用程序直接控制硬件,而是通过Windows操作系统提供的设备驱动程序来进行数据传递。串行口在Win 32中是作为文件来进行处理的,而不是直接对端口进行操作,对于串行通信,Win 32 提供了相应的文件I/O函数与通信函数,通过了解这些函数的使用,可以编制出符合不同...
用C++Builder在Win9x下开发串行通信程序是程序员们经常遇到却又令人头痛的事情,不但要理解许多复杂的API函数,还要掌握多线程编程。令人欣慰的是有一些公司专门为C++Builder开发了编写串行通信程序的开发工具,例如MOXA公司的Pcomm(该软件可在http:\www.moxa.com.tw下载),因而帮我们解决了串行编程这一难题。 ----下面结合一个具...
Android Service是分为两种: 本地服务(Local Service): 同一个apk内被调用 远程服务(Remote Service):被另一个apk调用 远程服务需要借助AIDL来完成。 AIDL 是什么 AIDL (Android Interface Definition Language) 是一种IDL 语言,用于生成可以在Android设备上两个进程之间进行进程间通信(interprocess communication, ...
标签: Web开发
在漫长的前端开发旅途上,无可避免的会接触到ajax,而且一般情况下都是用在同一域下的ajax请求;但是如果请求是发生在不同的域下,请求就无法执行,并且会抛出异常提示不允许跨域请求,目前我没有找到明确的资料说明这是为什么,我觉得应该是出于安全性的考虑吧。纵然如此,要实现跨域访问的话,方法还是有的,而且不只一种,在这里介绍其中一...

经验教程

385

收藏

57
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部