用Winsock实现点对点通信

合集下载

利用Winsock控件实现局域网通信

利用Winsock控件实现局域网通信

利用Winsock控件实现局域网通信Winsock控件是操作系统Windows提供的一种API,用于实现应用程序之间的网络通信。

利用Winsock控件,我们可以轻松地实现局域网通信,实现不同电脑之间的数据交互和消息传递。

在本文中,我们将介绍利用Winsock控件实现局域网通信的方法和步骤。

首先,我们需要在Visual Basic中引用Winsock控件。

在VB界面中,选择“工具箱”栏目,然后右键单击空白处,选择“组件”菜单。

在弹出的“组件”对话框中,找到Winsock控件,并勾选选择框。

其次,在VB界面中添加Winsock控件,然后设置相关参数。

具体步骤如下:1. 选择“工具箱”栏目,找到Winsock控件,将其拖拽到VB界面中。

2. 右键单击Winsock控件,选择“属性”菜单,设置控件的名称、端口号、IP地址等参数。

3. 创建“发送”和“接收”按钮,分别用于发送和接收消息。

4. 在发送按钮的单击事件中,利用Winsock控件的SendData方法,将数据发送到指定的IP地址和端口号。

5. 在接收按钮的单击事件中,利用Winsock控件的GetData方法,接收其他电脑发来的消息。

以上步骤完成后,就可以利用Winsock控件实现局域网通信了。

当一个电脑发送消息时,其他电脑就会收到该消息,并进行相应的处理。

利用这种方法,我们可以实现多台电脑之间的实时数据交换和消息传递,提高工作效率和协同处理能力。

总之,利用Winsock控件实现局域网通信是一种方便、快捷、高效的方法,可以实现不同电脑之间的数据交互和消息传递。

在实际开发中,我们可以根据具体需求和实际情况进行相应的调整和优化,提高系统的性能和稳定性。

在VB中使用Winsock实现通信

在VB中使用Winsock实现通信

在VB中使用Winsock实现通信2007-12-11 10:08:35|最近刚接触VB,学习了用Winsock创建聊天应用程序。

下面的实例分别用TCP协议和UDP协议实现通讯。

1. 选择通讯协议的标准在使用WinSock控件时,可以使用的协议包括TCP和UDP。

两种协议之间的重要区别在于它们的连接状态:a).TCP协议控件是基于连接的协议,可以将它同电话系统相比。

在开始数据传输之前,用户必须先建立连接。

b).UDP协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接。

2. Winsock控件使用TCP协议如果应用程序要使用TCP协议,那么首先必须决定应用程序是服务器还是客户端。

如果要创建一个服务器端,那么应用程序需要“监听”指定的端口。

当客户端提出连接请求时,服务器端能够接受请求并建立连接。

在连接建立之后,客户端与服务器端可以自由地互相通讯。

2.1 TCP服务器端窗体设计:为窗体添加如下的代码:Private Sub Form_Load()'设置本地端口号为6000Winsock1.LocalPort = 6000'打开监听Winsock1.ListenEnd SubPrivate Sub Winsock1_ConnectionRequest(ByVal RequestID As Long) Dim myStr As String'如果当前状态处于连接状态,则先关闭连接,再接收新的请求If Winsock1.State <> sckClosed ThenmyStr = MsgBox("客户请求建立连接,是否允许?", vbOKCancel) If myStr = vbOK Then'关闭连接Winsock1.Close'接收客户请求,建立连接Winsock1.Accept RequestIDWinsock1.SendData "接收"MsgBox "与客户建立了新连接"End IfEnd IfEnd SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim myStr As String'调用GetData方法接收数据Winsock1.GetData myStrText2.Text = myStrEnd SubPrivate Sub Winsock1_Close()Winsock1.CloseWinsock1.ListenMsgBox "与客户断开连接"End SubPrivate Sub Text1_Change()'当服务器端的文本框中的内容发生变化时,使用SendData方法发送信息Winsock1.SendData Text1.TextEnd Sub2.2 TCP客户端窗体设计:为窗体添加如下代码:Private Sub Form_Load()Text1 = "192.168.1.22"Text2 = 6000End SubPrivate Sub Command1_Click()If Winsock1.State = sckClosed Then'设置服务器的IP地址Winsock1.RemoteHost = Trim(Text1.Text)'设置服务器的端口号Winsock1.RemotePort = Trim(Text2.Text)'发出连接请求Winsock1.ConnectEnd IfEnd SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim myStr As String'调用GetData方法接收数据Winsock1.GetData myStrText4.Text = myStrOption1.Value = TrueEnd SubPrivate Sub Winsock1_Close()Winsock1.CloseOption2.Value = TrueEnd SubPrivate Sub Text3_Change()'当txtSend控件的内容发生变化时,调用SendData将信息传送给主机Winsock1.SendData Text3.TextEnd Sub2.3 运行方法1)同时运行服务器端程序和客户端程序,得到两个示意图(略)2)在客户端程序的界面中单击“连接”按钮,此时,服务器端程序显示“客户请求建立连接,是否允许?”3)单击“确定”,客户端的连接状态会变成“连接”状态,此时,两端已建立起连接。

基于Winsock技术实现点对点通信

基于Winsock技术实现点对点通信

V 1 1 No 4 o. 5 .
0c . oቤተ መጻሕፍቲ ባይዱ t 2 o6
基 于 Wisc nok技 术 实 现 点 对 点 通 信

摘 要

温 凯峰
( 应学 院 网络 中心 , 嘉 广东 梅州 5 4 1 ) 10 5
通 过 wi ok编程技术 , nc s 实现 了对基于 T P I C /P协议 的、 向连接 的流方 式套接字 网络通 信程序设计 , 面 阐述 了在
o i e a d gv h a i t o g t o e v ra d c in a sae rg a ma e b is c ’ c n ol rb n l n ie t e b sc h u hs fs r e n l tt n lt d p o m d y W n o k s o t l y VB. n e r r r e
完全兼 容 . no k的开 发 工具 可 以在 V 、 B的编 Wisc CV
Sce服 务端 程 序 也是 一 样 的 , 客 户端 程 序 okt 当 连接 到 服务端程 序 时 , 就 建 立 了一个 双 向通 信连 也
译器 中找 到. 用 Wisc 件 可 以与 远 程 计算 机 利 nok控
线点对点通信的技术 支持 , 出了利用 V 给 B中的 Wi ok控件编写服务器端 、 nc s 客户端通信程序 的基本思路. 关键词 T P I Wi ok Sce; C /P; n c ;okt异步通信 ; s 客户机/ 服务器模 型
【 中图分 类号 】P9.4 T 330
【 文献标识码 】 A
( e t f ew r , aigU i r t, i o 10 5,hn ) C n eo tok J yn nv s y Me h u5 4 1 C ia r N i ei z

tcp协议上实现点对点通信的方法

tcp协议上实现点对点通信的方法

tcp协议上实现点对点通信的方法在当今的网络时代,点对点通信已成为各种应用场景中不可或缺的技术手段。

TCP(传输控制协议)作为一种可靠的传输协议,为实现点对点通信提供了有力保障。

本文将详细介绍在TCP协议上实现点对点通信的方法。

一、TCP协议简介TCP(传输控制协议)是一种面向连接、可靠的传输层协议。

它通过三次握手建立连接,确保数据传输的可靠性。

在TCP协议中,数据以流的形式传输,通信双方通过端口号区分不同的应用进程。

二、点对点通信的概念点对点通信是指两个网络节点之间直接进行数据交换,不需要经过第三方节点。

在TCP协议上实现点对点通信,可以有效降低通信延迟,提高数据传输效率。

三、实现点对点通信的方法1.基于TCP协议的Socket编程Socket编程是实现点对点通信的基础。

在Socket编程中,通信双方通过创建Socket对象,建立连接,然后进行数据传输。

(1)创建Socket对象在Java、C++等编程语言中,可以使用Socket类创建Socket对象。

例如,在Java中:```javaSocket socket = new Socket("对方IP地址", 对方端口号);```(2)建立连接创建Socket对象后,客户端与服务器端会进行三次握手,建立连接。

(3)数据传输连接建立后,双方可以通过Socket对象的输入输出流进行数据传输。

2.使用NIO(非阻塞IO)传统的Socket编程基于BIO(阻塞IO),在处理大量连接时,效率较低。

NIO(非阻塞IO)是一种更高效的IO模型,可以实现对大量连接的高效处理。

在Java中,可以使用Selector对象实现NIO。

Selector可以监控多个Socket连接,当某个Socket连接有数据可读或可写时,Selector会通知应用程序进行处理。

3.使用第三方库为了简化点对点通信的实现,可以使用第三方库,如Netty、MINA等。

这些库封装了底层的Socket通信细节,提供了更易用的API。

局域网的点对点通信

局域网的点对点通信

整理旧文档,发现了这篇很陈旧的论文,这是我十年前写的第一篇论文,也是我第一篇在杂志上发表的论文,同时也是我大学的毕业设计论文。

十年前,我写毕业设计论文的时候,为了写这篇论文也花费了我不少的时间和精力,整天都泡在图书馆里。

今天再看这篇文章,竟然感觉如同隔世的感觉,那时候什么是网络呢?Windows95刚刚发布,WindowsNT和Windows2000都没有普及,网络在那时还是一个神秘而高深的技术,那时我们建立局域网用的一律都是Novell系统,没有图形环境,设置非常繁琐复杂。

而现在,这些东西完全都过时了,那时候先进的TCP/IP现在面临其协议不安全、有漏洞的指责,NETBIOS和IPX就早已失传了,十年时间,竟然整个网络技术发生了如此天翻地覆的变化,慨叹,自己都已经快跟不上这个时代了。

这篇文章还是重新发布一下,以做纪念。

局域网上的点对点通信摘要:本文讨论了在局域网络环境下,实现工作站之间的实时通信的三种方法.重点介绍了基于NetBIOS 及TCP/IP协议实现工作站之间的点对点通信(Peer to Peer), 并给出了设计的应用程序实例.关键词:局域网点对点通信 NetBIOS TCP/IP IPX/SPX一引言在信息化社会里,人们都希望以快速简的方法获取信息,计算机网络的出现,使人们的这个想法得以实现.通过计算机网络,人们可以方便地实现通讯和共享资源: 计算机网络使信息传播和信息处理加工的设备和工具空前紧密地结合在一起,这种技术的进步和发展对提高人类社会信息化水平有着巨大的推动作用.但在实际的计算机网络中,往往需要互连来自不同厂家的机器,要具备异种机的互联能力.由于各厂家的机器有其各自的总线结构,文件系统,输入输出系统和采用的字符集等,因而使这种互联成为一件十分困难的事情.另外,从局域网的运行情况来看,以Novell Netware网络为例,文件服务器是网络的核心,其上运行Netware操作系统软件,为网上工作站提供共享资源与服务.因此,文件服务器的好坏对网络的性能极其重要.随着网络的扩大,连接的工作站增多,服务请求也迅速增加,服务器的负载也相应加重,服务器有可能成为网络工作的"瓶茎".针对上述情况,本文利用网络上的点点通信思想,在不使用服务器的情况下实现不同工作站之间的文件传输和共享打印.二局域网概述随着微型计算机技术的迅猛发展和日益成熟,微型计算机的价格在不断下降,因此人们有条件的将十几台微机,外设依网络通信协议连接起来,形成局域网(Local Area Network).它具有以下几个特点:1) 采用基带传输,传输速度较高.2) 网络覆盖地域较小,可不用调制解调器.3) 传输误码率低.局域网的功能概括起来可归为以下几点:1) 资源共享.包括大容量硬盘,高速打印机,数据及软件.2) 电子邮件系统.3) 使用分布处理实现负载均衡.机算机网络中对于各种约定做了如下定义:将机算机网络同等层间的通信约定称为网络协议.将不同层的通信约定称为接口.到目前为止最有代表性的网络分层模型有两种.其一为国际标准化组织(ISO)所提出的开放系统互连(OSI)七层协议参考模型,其二为美国电气与电子工程师学会(IEEE)802委员会所提出的参考模型.(一) ISO/OSI七层协议及参考模型OSI参考模型的七层分层结构如图1所示.该模型是按逻辑组合功能来分层的,上一层是建立在下一层的基础上,较高层向较低层提供服务请求,而较低层为较高层提供服务.所谓开放系统是指按照这种模型所构成的网络是可以互连的,是彼此开放的,从而便于世界各地的网络互连.OSI模型各层定义如下:应用层网中的网络应用软件在此层运行.表示层辅助用户执行诸如文间传送,程序运行等任务.会话层管理低层与用户之间的连接,是用户到网络的接口.传输层检查网络数据的完整性,必要时将数据分组调整到正确的位置.设置分组题头,以便将数据组发送到目的地.网络层以分组形式,选择路径发送数据.各分组要穿过两个低层到达目的地.数据链路层管理网络接口处的输入/输出.对原始数据进行组织和检察.物理层定义在网络电缆连接及接线中用的规则与协议.包括例行联络处理及传输规范,还定义了使用的电缆类型及连接器.(二) IEEE 802标准局域网络参考模型IEEE 802标准遵循ISO/OSI参考模型的原则,解决了最低两层----物理层和数据链路层的功能以及与网络层的接口服务,网际互连有关的高层功能,IEEE 802 LAN 参考模型与ISO/OSI 参考模型的对应关系如图3所示.1 IEEE 802 的五个标准文件IEEE ( Institute of Electical and Electronics Engincers ),即电气和电子工程师学会,它是一个专业性质的学会.它对OSI模型的低两层即物理层及数据链路层的协议标准进行了大量的研究.IEEE 802标准制定目的是为了在不同的厂商所制造的设备间具有兼容性,从而为使用该网络的用户和设备制造者在付出较小的代价后就能顺利地在这些设备间进行通信.该学会在经过多年的研究和修订,于1984年正式提出了局域网标准的五个标准文件.IEEE 802.1 它阐述了802方案与ISO互连参考模型间的关系.IEEE 802.2 逻辑链路控制标准.IEEE 802.3 采用CSMA/CD访问的总线结构标准.IEEE 802.4 采用令牌访问方法的总线结构标准.IEEE 802 各标准间的关系如图2所示.2 IEEE 802 LAN 标准局域络参考模型从对ISO参考模型的讨论中以然清楚的了解到物理层,数据链路层及网络层共同完成了报文分组的传输功能,因此物理层,数据链路层是必不可少的.但考虑到局域网络的特点,IEEE 802对OSI参考模型作了修正.IEEE 802将数据链路层分为两个子层,即逻辑链路子层(LLC)和介质访问控制子层(MAC).在MAC子层中CSMA/CD,令牌总线(Token Bus),令牌环(Token Ring)等几种介质访问控制方式.在数据链路层同网络层的接口设置了服务访问点(SAP).三网络通信及实例(一) 进程通信进程,指程序的一次执行.进程通信指各进程之间共享资源,相互进行数据传输的信息交换方式.OSI的传输层为进程通信提供了服务.进程通信的实现方法:1) 建立和拆除进程间的连接2) 信息传递与控制(二) 点对点通信从OSI参考模型的应用层来看,可认为网络是由工作站和服务器组成的,但从传输层和网络层的角度看,工作站和服务器没有本质的区别,它们都是连接到网络上的一台机器,都可以用网络地址或名称来代替.它们之间的通信,就是所谓的点对点通信,也叫对等通信.在局域网上,点点通信意味着两个工作站可以直接对话而不用经过文件服务器中转.(三) 实例: Windows 95的点对点网络通信功能:Windows 95操作系统的Network Neighborhood(网络邻居)的三个重要的部分是:Netware的客户服务,点对点对等服务,Internet或/TCP/IP服务.在Windows 95内建的点对点对等网络功能,可以很容易地在一个小工作组内共享文间和打印机,而不用文件服务器.Windows 95 比Windows for workgroup3.11最具特色的功能之一是:它有一个大大改进的安全方案,每个用户即可以在用户级又可以在资源级共享文件和打印机等资源.在Windows 95下,点对点的对等网络具有更大的灵活性,因为它可在Netware多用户(运行于IPX/SPX或TCP/IP协议下)之间建立点对点对等连接.Windows 95 能做Windows for workgroup 客户能做的每件事,还可以做得更好.无论用户选用什么样的平台,他们都可以利用Network Neighborhood非常方便地浏览网络资源.用户选中工作台面上的一个图标即可直接进入NetworkNeiborhood工作窗口,此后,用户不关心网络连接,驱动器映像,打印机队列等工作,即可连接到任意类型的网络服务器,浏览服务器中的文件或其它共享资源.安装对等网络服务功能具体是这样的,从Control Panel中打开Network对话窗口,移动其中的Configuration标签,点中add按扭后,在弹出窗口中选择Client.此后,会弹出一个Select Network Client(选择网络客户)的对话窗口,选中其中的Client for Microsoft Network后,点OK按扭.重新启动机器后,在Network Neighbour hood中将显示同一工作组中共享文件的所有客户.同时,在Network Neighborhood中也列出了网络中的Microsoft,Warp Connect以及IBM LAN Server域名,Microsoft工作组和Netware通过使用全局命名规则(Universal Naming Convention,UNC)而不是通过驱动器映射到的Netware网络服务器.文件共享在Configuration标签中设置File and Print Sharing(文件与打印共享)选择项,然后在Access Control(访问控制)标签中选中Share Level Access Control项,为了配置共享选择项,必须返回到Desk top或Explorer中,用鼠标右键在准备共享资源(如键盘,光驱)上点一下.此后,会弹出一共享设置Sharing对话框.如使用Netware网络,那么结果是:要么网络中其他用户都可以访问你的共享文件,要么无人可访问.四点对点通信的实现局域网中工作站之间的通信程序的开发一般通过四种途径:第一种是通过改造网络原有通信软件来实现.但这种改造必须以对该软件充分了解为基础,否则改造后很难保证不影响网络的整体性能,甚至会造成系统运行不可靠,而改造后的通信质量不一定理想.第二种是利用Novell网本身的网络协议IPX/SPX来实现,由于这种方法开发比较麻烦,采用的并不多.第三种是通过NetBIOS功能调用来实现,NetBIOS是PC LAN的通信接口标准,广泛适用于多种微机网络,使得以它为基础的设计和应用开发可移植性好.它不依赖于任何网络硬件,是一个介于网络硬件和用户应用程序之间的接口协议.其通信原理是:两个要进行通信的工作站通过名字建立一个虚电路,然后向相应的虚电路号发送或接收信息,这样通过虚电路实现了两个工作站之间的对等通信.利用NetBIOS实现工作站之间的实时通信,功能比较强,编程实现比较容易,所以应用比较广泛.第四种是通过TCP/IP协议来实现.下面我们将详细讨论各种技术的实现.(一) 基于IPX/SPX 的实现技术由于IPX/SPX不能支持多协议之间的通信,因此本文略之.(二) 基于NetBIOS的编程接口NetBIOS是Network Basic Input/Output System 的缩写,即网络基本输入输出系统,它是一种应用程序的接口.用户可以调用各种NetBIOS功能,而无需涉及到各种最低层的通信协议,从而实现数据源地与数据目的地之间的信息交换.1 NetBIOS概述NetBIOS是IBM公司于1984年首次推出的.它可以支持各种著名的通信协议,如TCP/IP,MAP/TOP,XNS,IEEE和OSI等,不仅适用于DOS环境,还可以用在UNIX,OS/2,WINDOWS环境.NetBIOS作为一种网络支撑软件,在ISO的开放系统互联(OSI)模型中的位置如图3所示.2 NetBIOS的基本概念命令NetBIOS的功能是由执行一系列命令来完成的.有Wait和No_wait两种形式.名字NetBIOS是一种按名字工作的系统,每一网络工作站和服务器都有一个(或几个)名字,每个节点还有一个永久节点名,它是在网络适配卡上的6字节网络地址前面再添上10个字节0构成.数据报和会话数据报是一种无连接的服务,即各个数据报之间互相独立,单独传送.在网络上任意两个名字之间可以建立一个会话,或多个会话.网络控制块(NCB)应用程序调用NetBIOS命令,必须先构造一块网络控制块(NCB),然后执行一次5CH中断.信息帧在网络中传递的信息是以帧的形式组织的.NetBIOS根据用户的命令,NCB 以及它所知道的有关会话和名字的情况自动生成和管理信息帧,用户不必直接过问.服务器报文块3 NetBIOS设计要点在设计两个或多个工作站之间对话的时候,要注意处理好以下几个问题:1) 选择通信方式网络中的通信可以采用数据报方式,也可以采用会话方式.会话方式的特点是由通信协议保证每一报文能够正确地送到目的地.如果报文在传送过程中发生了差错,则通信协议会自动地进行重发,加以改正.而且,如果你发出的报文不止一个,那么通信协议还能够保证接收到的报文次序和发送时的次序一致.这些保证都是对用户应用程序透明地进行的,用户完全不需操心.但是,会话方式的主要缺点是过程比较复杂,在发送报文之前先要建立会话,送完报文之后又要撤除会话.因此,会话方式比较适合于点到点的多次往复式的对话.数据报的特点正相反.它是把每一个报文作为一个独立的数据报处理,从而免除了建立和撤除会话的麻烦.但正因如此,它不能保证接收到的报文次序和发送次序一致,甚至不能保证每一个报文都能够正确无误地达到收方.在报文丢失或发生错误时,系统不向发送方提供出错信息.如果你所设计的对话环境由一系列互不相关的报文组成,或者每次对话都很简单,那么采用数据报传送可以大大加快对话的速度.另外,如果用数据报传送比较重要的报文,为了防止差错和丢失,可以在应用程序中为报文加上查错和序号功能.2) 选择命令返回方法执行NetBIOS命令可以采用等待方式和非等待方式.对于非等待方式,又可以有两种不同的做法:一种是轮询方法,即循环检查网络控制块(NCB)中的最终返回代码字段,当它的值从0xFF变为其它值时,表示该命令执行完毕. 另一种是异步事件处理方法,即告诉NetBIOS,在当前命令执行完毕后存放在NCB的POST 程序地址字段中的程序指针,继续执行一个指定的程序段.需要指出的是,这两种做法虽然难易程度不同,但都是在后台进行.对于前后操作,都是立即返回用户程序,不必等待命令完成.它们的主要差别在于对网络负荷的影响.比如,一个工作站发出一条命令,要求另一个工作站执行一项比较费时的任务.如果这个工作站采用轮询方式,持续不断地询问对方是否完成,就会极大地增加网络的负荷.这时,尽管轮询比较容易编程,那也不是一种好的选择.4 NetBIOS基本程序1)调用NetBIOS要调用一NetBIOS功能,需要做以下三件事:(1) 构造一个NCB,包含所有需要告诉NetBIOS的信息.#define USGC unsigned char#define USGI unsigned int#define USGL unsigned longstruct NCB {USGC NcbCommand;USGC NcbRetCode;USGC NcbLsn;USGC NcbNum;char * NcbBufferOffset;USGI NcbBufferSegment;USGI NcbLength;char NcbCallName[16];char NcbName[16];USGC NcbRto;USGC NcbSto;char * NcbPostRtnOffset;USGI NcbPostRtnSegment;USGC NcbLanaNum;USGC NcbCmdCplt;char NcbReseredArea[14];} ZeroNcb;(2) 把网络控制块地址写入ES:BX寄存器,作为指向该NCB的远程地址指针.(3) 执行5CH中断.执行中断时,NetBIOS自动进入ES:BX寄存器指定的地址,读出网络控制块,得知一切有关该操作的信息. 下面是设置指针和执行中断的程序段:void NETBIOS (struct NCB *NcbPtrNear){union REGS InRegs,OutRegs;struct NCB far *NcbPtrFar=(struct NCB far*)NcbPtrNear;segread(&SegRegs);SegRegs.es=FP_SEG(NcbPtrFar);InRegs.x.bx=FP_OFF(NcbPtrFar);int86x(NetbiosInt5c,&InRegs,&OutRegs,&SegRegs);}2)定义NetBIOS命令在程序段中还包括对所有NetBIOS命令(包括WAIT和NO_WAIT)3) POST程序在执行非等待命令时,可以把一个POST程序的地址告诉NetBIOS,然后直接返回前台操作.当后台命令完成时,它会自动转去执行POST程序.从这段描述可以看出,我们必须把POST程序编成一个中断处理程序.unsigned es_reg,bx_reg,msg_received_flag;NCB far *posted_ncb_ptr;void interrupt POST (void){es_reg=_ES;bx_reg=_BX;posted_ncb_ptr=MK_FP (es_reg,bx_reg);msg_received_flag=TRUE;}4)数据报服务假定A工作站和B工作站之间以数据报方式通信,其主要步骤如下:工作站A 工作站B增加名字A 增加名字B发送报文给B -----------> 收到一个报文收到一个报文 <------------ 发送报文给A删除名字A 删除名字B5)会话服务A工作站和B工作站之间以会话方式通信步骤如下:工作站A 工作站B增加名字A 增加名字BListen Call A站发送报文给B -----------> 收到一个报文收到一个报文 <------------ 发送报文给AHang up B站 Hang up A站删除名字A 删除名字B5 Windows 通信程序的特点在Windows中,由于它是非抢先多任务,所以NetBIOS最好用异步方式(非等待式),CPU发出NetBIOS调用后,处理其他消息, 当NetBIOS完成后会自动执行后置例程POST, POST 通过 PostMessage 把一条用户定义的消息放到合适的队列中.Windows 应用程序接到该消息后再处理接收到的网络数据.其次,由于Windows的代码段和数据段可移动,这对异步NetBIOS是致命的,当异步NetBIOS命令发出后,如果代码段或数据段移动,命令完成后,NCB所指示的缓冲区已发生变化.解决的方法是使代码段和数据段不可移动.在DEF文件中定义如下:CODE PRELOAD FIXEDDATA PRELOAD FIXED SINGLE6 点对点通信程序源代码. (基于NetBIOS)完整的源程序见附录.(三) 基于TCP/IP协议的编程接口1 TCP/IP简介TCP/IP的历史要追溯到70年代中期,当时ARPA为了实现异种网之间的互连(interconnection)与互通 (intercommunication),大力资助网间网技术的研究和开发,于1977年到1979年推出目前形式的TCP/IP体系结构和协议规范. 到今天,TCP/IP技术以及Internet网间网已经为广大计算机工作者,机算机厂商和机算机用户所接受.据统计,到1990年,Internet以包含遍布欧美的五千个活动网络,超过三十万台机算机.作为一种事实上的工标准,TCP/IP技术方兴未艾.2 TCP/IP的网络分层结构对TCP/IP协议来说,TCP提供传输层服务,IP提供网络层服务.TCP/IP协议组(或Internet协议组)的分层结构及其与OSI模型的对应关系如图4所示.图中有关协议的名称及其基本含义如下:(1) TCP. 为传输控制协议(Transmission Control Protocol).它是提供给用户进程的一个可靠的全双工字节流的面向连接的协议.大多数Internet应用程序使用TCP.因为TCP使用IP,所以整个Internet协议组也常称为TCP/IP 协议组.(2) UDP. 为用户数据报协议 (User Datagram Protocol).(3) ICMP. 为网间报文控制协议 (Internet Control Message Protocol).(4) IP. 网间协议 (Internet Protocol). IP协议是为TCP,UDP和ICMP 提供分组发送服务协议.(5) ARP. 地址转换协议.(6) RARP. 反向地址转换协议.3 Socket编程界面(1) Socket 原理Socket编程界面由4BSD UNIX首先提出,目的是解决网间网进程通信问题.Socket接口为进程间通信提供了一种新的手段,它不但能用于同一机器中的进程之间的通信,而且支持网络通信功能.Socket具有类型,反应了对用户透明的通信特性.一个完整的Socket连接用一个相关描述:{ 协议,本地地址,本地端口,远地地址,远地端口 }Socket 是面向客户-服务器模型而设计的,针对客户和服务器程序提供不同的Socket系统调用.(2) Socket系统调用不管Socket内部机制如何,它提供给应用程序员的最终界面是一组系统功能调用.下面,我们一一给出重要的Socket系统调用.1. 创建 Socket ----- socket()调用格式如下:sockid = socket (af,type,protocol)af : 地址族,指本socket所用地址类型.type : 类型,指创建socket的应用程序所希望的通信服务器类型.protocol : 协议,指本socket请求的协议.2. 指定本地地址 ---- bind()调用bind()将本地socket地址与所创建的socket联系起来,即将本socket地址赋予socket,以指定本地半相关.bind()的作用相当于给socket命名,调用格式为:bind (sockid,localaddr,addrlen)sockid : socket号.localaddr : 本地socket地址.addrlen : 地址长度.3. 建立socket连接 ---- connect () 与 accept ()调用这两个系统调用用于完成整个相关的建立.其中connect用于建立连接 .调用格为:connect (sockid,destaddr,addrlen)destaddr : 指向对方socket地址(信宿地址)结构的指针.accept : 用于面向连接的服务器,其调用格式为:newsock = accept (sockid,clientaddr,paddrlen)clientaddr : 指向客户socket地址指针.paddrlen : 客户socket地址长度.4. listen() 调用此调用用于面向连接服务器,表明它愿意接收连接,listen()在accept()之前调用,格式为:listen (sockid,quelen)quelen : 请求队列长度.5. 发送数据 ---- write(),writev(),send()与sendto(),sendmsg()用于socket数据发送的系统调用一共有五个,其中三个,write(),writev()和send()用于面向连接传输,其余两个用于无连接传输. 面向连接的调用可以不指定信宿地址,而无连接的调用必须指定.假如无连接socket的双方均调用过connect(),可以认为是建立有连接的 socket,也可以面向连接调用发送数据.三个面向连接调用三者的格式大致相同:write (sockid,buff,bufflen) : 缓冲发送writev (sockid,iovector,vectorlen) : 集中发送send (sockid,buff,bufflen,flags) : 可控缓冲发送其中buff指向发送缓冲区的指针,bufflen是发送缓冲区大小.用于无连接数据发送的调用有两个:sendto (sockid,buff,bufflen,flags,dsadd,addrlen)sendmsg (sockid,message,flags):可控集中无连接发送.6. 接收数据 ---- read(),readv(),recv()与recvfrom(),recvmsg()接收数据与发送数据系统调用是一一对应的,两者参数的最大区别是,前者buffer是一个指针,其所指单元初值为欲读数据长度,调用后的值是实际读出的值.4 客户--服务器模型的Socket实现框架1)客户--服务器模型时序图下图是面向连接客户--服务器模型的典型时序图服务器客户socket() socket()bind() bind()listen()accept() 等待客户连接请求阻塞<━━━━━━━━━━━━━━━ connect()read() <━━━━━━━━━━━━━━━> write()2)服务器socket地址的确定在客户--服务器模型中,所有的作用者都是客户首先发起的(如连接请求,服务请求等),因此客户必须要知道服务器socket地址,另外,客户调用服务器之前,可以在命令行中给出服务器所在主机的域名,根据域名可以获得服务器主机的地址,系统调用为:hp=gethostbyname(host).其中 host可以是服务器主机域名,返回hp是一个指向主机地址结构的指针.五结论综上所述,TCP/IP对于异种机具有极强的互连能力,很可能成为未来网络协议的标准,其通信编程有一整套方便实用的工具.因此,用其开发通信软件方便,容易,可升级.而NetBIOS是一种可加载模块,其特点是可方便地实现不同协议之间的通信,其通用性极强,可方便地在不同局域网间移植.以上两种方法各侧重点不同,而近年来由于Internet的兴起,TCP/IP逐渐变得重要了。

03实验三 WinSock实现网络通信【必开】

03实验三 WinSock实现网络通信【必开】

实验三WinSock实现网络通信一、实验目的掌握利用WinSock控件实现网络通信的方法。

二、实验任务与要求1. 使用Visual Basic建立通信界面。

2. 利用WinSock控件编程实现点对点(点对多点)通信。

三、实验背景Sockets是在Unix系统上提出来的,一开始主要是用于本地通讯,但很快就应用到C/S体系上。

MicroSoft公司在此基础上创建了WinSock控件,专门用于Windows接口,与Sockets完全兼容。

Winsock控件对用户来说是不可见的,它提供了访问TCP 和UDP 网络服务的方便途径。

Microsoft Access、Visual Basic、Visual C++ 或Visual FoxPro 的开发人员都可使用它。

为编写客户或服务器应用程序,不必了解TCP 的细节或调用低级的Winsock APIs。

通过设置控件的属性并调用其方法就可轻易连接到一台远程机器上去,并且还可双向交换数据。

先来看网络通信协议的基础和选择:1.TCP(数据传输协议)基础数据传输协议允许创建和维护与远程计算机的连接。

连接两台计算机就可彼此进行数据传输。

如果创建客户应用程序,就必须知道服务器计算机名或者IP 地址(RemoteHost 属性),还要知道进行“侦听”的端口(RemotePort 属性),然后调用Connect 方法。

如果创建服务器应用程序,就应设置一个收听端口(LocalPort 属性)并调用Listen 方法。

当客户计算机需要连接时就会发生ConnectionRequest 事件。

为了完成连接,可调用ConnectionRequest 事件内的Accept 方法。

建立连接后,任何一方计算机都可以收发数据。

为了发送数据,可调用SendData 方法。

当接收数据时会发生DataArrival 事件。

调用DataArrival 事件内的GetData 方法就可获取数据。

2.UDP(用户数据文报协议)基础用户数据文报协议(UDP) 是一个无连接协议。

实现一个简单的点对点网络聊天程序

实现一个简单的点对点网络聊天程序

实现一个简单的点对点网络聊天程序随着互联网的不断发展,人们越来越依赖于网络进行信息传递和交流。

而随着新技术的不断涌现,人们对网络聊天的需求也越来越高。

在这个背景下,开发一个简单易用的点对点网络聊天程序,无疑是一个非常受欢迎的项目。

本文将介绍如何实现一个基于Python的简单点对点网络聊天程序。

第1步确定技术框架在开始编写程序之前,需要确定使用的技术框架。

由于点对点网络聊天程序需要实现实时通信,这就需要使用一种支持Socket 编程的技术框架。

Python作为一种易于学习的高级编程语言,在网络编程方面也表现出了优秀的性能。

因此,本文选择使用Python的Socket库和Tkinter库实现点对点网络聊天程序。

第2步编写客户端程序接下来,需要编写客户端程序。

客户端程序主要用于连接服务器,并向其他客户端发送消息。

客户端程序的实现需要遵循以下步骤:1、导入Socket和Tkinter库。

2、定义客户端程序类。

3、定义GUI组件和方法,包括用户界面、消息发送功能和消息接收功能。

4、定义连接服务器和发送消息的方法。

客户端程序的核心代码如下:import socketimport tkinter as tkclass Client:def __init__(self):ername = Noneself.server_ip = "127.0.0.1"self.server_port = 5555self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.gui()def gui(self):self.root = ()self.root.geometry("400x400")self.root.title("P2P Chat - Client")self.entry_message = tk.Entry(self.root)self.entry_message.pack(side="left", fill="x", expand=True)self.button_send = tk.Button(self.root, text="Send", command=self.send_message)self.button_send.pack(side="right")bel_message = bel(self.root, text="Enter username:")bel_message.pack(side="left")self.entry_username = tk.Entry(self.root)self.entry_username.pack(side="left", fill="x", expand=True)self.button_connect = tk.Button(self.root, text="Connect", command=self.connect_to_server)self.button_connect.pack(side="right")def connect_to_server(self):self.client_socket.connect((self.server_ip, self.server_port)) ername = self.entry_username.get()self.client_socket.send(bytes(ername, "utf8"))self.receive_messages()def send_message(self):message = self.entry_message.get()self.client_socket.send(bytes(message, "utf8"))self.entry_message.delete(0, tk.END)def receive_messages(self):while True:try:message = self.client_socket.recv(1024).decode("utf8") print(message)except OSError:breakdef mainloop(self):self.root.mainloop()if __name__ == "__main__":client = Client()client.mainloop()第3步编写服务器端程序客户端程序只能够实现连接服务器和发送消息的基本功能,还需要依靠服务器端程序实现客户端之间的消息传递。

电脑与电脑通过wifi点对点连接教程

电脑与电脑通过wifi点对点连接教程

两台电脑无线连接的办法无线网卡双机互连配置(无路由或无AP,只通过无线网卡)首先在一台机子的网上邻居,右键点击选择“属性”选中要来设置的无线网卡的连接“网络连接”窗口,右击打算用来共享的无线网卡并且选择“属性”,会弹出新的窗口。

在弹出的窗口中设置笔记本电脑(也可能是台式机)的无线网卡TCP/IP属性。

在无线网络连接项属性对话框的“常规”选项卡中设置IP地址。

两台机子设置成同网段的,例如:“192.168.1.X”(X是代表一个数值,从0到255,都可以),子网掩码设置为255.255.255.0。

选择“无线网络配置”选项卡。

选择“用Windows配置我的无线网络设置”复选项,以激活下面的其他配置选项。

如果要添加新的无线网络,可单击“添加”按钮,在打开的如下图所示对话框中进行。

在下方选择“添加”按钮,会弹出下图的窗口,在服务名(SSID)中填写你喜欢的名称,注意不能用中文,其他电脑在寻找这个点对点连接的时候就会看到这个名字,我们在此写grfwgr。

然后在打开的页面里进行相关设置。

首先要配置的是无线网络SSID,一定要与对应的无线网卡所配置的SSID一致。

然后在下面的“无线网络密钥”项下配置与对应无线网卡相同的安全选项。

并要选择“这是一个计算机到计算机(特定的)网络;没有使用无线访问点(C)”复选项。

如果想要配置IEEE802.1x身份验证,则单击如(第2步)所示对话框中的“验证”选项卡。

在其中就可以选择两种IEEE802.1x身份验证方法。

当然如果选择的是“智能卡或其它证书”选项,则一定安装了智能卡或计算机证书,通常不用配置IEEE802.1x身份验证。

在“连接”选项卡中仅配置是否允许计算机当所配置的无线网络在有效区域中即自动连接,非常简单,不作详细介绍。

配置好后单击“确定”按钮返回到如(第1步)所示对话框。

在(第1步)所示对话框中单击“高级”按钮,打开如下图所示对话框。

在此对话框中要指定客户端所连接的无线网络类型,将“任何可用的网络”更改为“仅计算机到计算机”,并关闭“自动连接到非首选的网络”选项。

无线网络点对点连接方法

无线网络点对点连接方法

无线网络点对点连接教程
在进行设置之前请保证两台电脑的无线网卡是在正常工作状态下1、右键网上邻居属性---右键无线网络连接属性---无线网络配置
2、选择高级
3、选择第三项,然后选择关闭
两台电脑都需要以上步骤才可以
4、按完关闭之后回到第2步的界面,选择添加,随便输入个网络名(SSID),无线网络密
钥可以选择自动也可以手动,我是选择的手动,毕竟自己输个密码放心一点不是~~~!!
输入好了确定
这个步骤在任意一台电脑上设置就可以了。

5、点击任务栏下面的无线网络图标,在无线网路界面刷新一下,是不是已经有你刚刚添加
的连接了呢,有就连接一下试试看,如果没有重起一下电脑就OK拉。

现在两台电脑之间已经组建了一个点对点的局域网了,下面我们开始设置共享
6、双击网上邻居,选择设置家庭小型办公网络,直接下一步
把忽略已断开的网络硬件沟上,在下一步
到这里需要选择一下的就是,插TD上网卡的电脑选择第一项,另外一台电脑选择第二项,然后下一步
在下面就是给你的两台电脑分别随便取个名字然后下一步。

选择工作组,用默认的也可以,你自己取个名字也可以,但是两台电脑的工作组的名称要统一,然后一路下一步,直到倒数第二步,选择完成该向导不再其他计算机上运行,然后完成,重新启动电脑,设置完成,两台电脑可以无线共享TD上网了。

另外,大家家里的电脑要是没有无线网卡只有普通的插网线的网卡可以去电脑市场买几米点对点的网线(很便宜)直接插到两个网卡里面,从这个教程的第6步开始设置也是一样的,最后祝大家上网愉快,生活开心。

原创《网络工程》课程设计——基于MFC WinSock的点对点聊天室的设计与实现 服务器端设计说明书

原创《网络工程》课程设计——基于MFC WinSock的点对点聊天室的设计与实现 服务器端设计说明书

网络编程课程设计基于MFC WinSock的点对点聊天室的设计与实现服务器端设计说明书学生:学号:指导教师:2013年6月25日目录:一.程序结构 (3)1)类定义 (3)2)主要类成员 (3)二.详细设计 (4)1)使用MFC AppWizard 创建服务器端应用程序框架 (4)2)为对话框界面添加控件对象 (4)3)为对话框中的控件对象定义相应的成员变量 (5)4)在预编译头文件StdAfx.h中增加头文件 (6)5)创建从CAsyncSocket类继承的派生类 (6)6)为CMySocket类添加成员变量和成员函数 (6)7)手工添加代码 (6)8)添加对于MySocket.h的包含语句 (8)9)为对话框中的控件对象添加事件响应函数 (8)10)为对话框类添加成员变量和成员函数 (8)11)为对话框类添加事件函数和成员函数的代码 (8)三.运行结果 (11)一.程序结构 1)类定义2)主要类成员2.1 CCAsyncServerDlg 类classmember functionInitDlg() 自行添加的初始化函数,包含获取端口号及主机地址的方法OnAccept() 自行添加的事件函数,由套接字类的OnAccept 事件处理函数调用,实际处理该事件OnClose() 自行添加的事件函数,由套接字类的Onlose 事件处理函数调用,实际处理该事件OnReceive() 自行添加的事件处理函数,由套接字类的OnReceive 事件处理函数调用,实际处理该事件 OnLsiten() 当用户单击“listen ”按钮时,执行此函数 OnSend() 当用户单击“send ”按钮时,执行此函数 OnDisconnnect() 当用户单击“disconnect ”按钮时,执行此函数 m_listenSocket CMySocket 下,服务器端用作与客户端连接的套接字 m_connSocketCMySocket 下,服务器端用作监听的套接字 m_Iport UINT 类型的对话框类控件对象 m_listen CButton 类型的对话框类控件对象 m_MsgCString 类型的对话框类控件对象classspecificationCCAsyncServerDlg 主对话框类,用于图形界面的处理,通过调用CMySocket 类提供的函数实现与服务器的连接与交互。

计算机点对点连接方法

计算机点对点连接方法


最后的状态是这样的:
6、服务器无线连接IP设置,同样设置IP地址,IP地址的网段千万不能和有线的一样,这点也关键,否则就搞不成了,网关和DNS用有线网卡的IP地址(如我的:IP地址:192.168.205.100,子网掩码:255.255.255.0,默认网关:192.168.1.88,首选DNS服务器:192.168.1.88(注意:这里的网关和DNS必须用有线网卡的IP地址)),记得点一次“确定”关闭窗口,不要关闭“无线网络连接X属性”窗口
7、选择“无线网络连接X属性”窗口的第二个页面“无线网络配置”页面(注:如果没有该选项请看后面“补充1”),勾选“用配置我的无线网络设置”,点“新建”或“添加”打开“无线网络属性”窗口,网络名(SSID)自定义填一个(如:NEUSOFT-P2P-LINK),勾选去掉“自动为我提供此密钥”,往上看,填“网络密钥”和“确认网络密钥”(如:NEU88,NEU88,记得密码只是5位),还没完,接着看下面,勾选上“这是一个计算机到计算机(特定的)网络;没有使用无线点”,点击两次“确定”关闭窗口,OK,服务器设置完成
8、其它终端电脑设置就要简单点了,都只是设置无线网络适配器(如同事的:IP地址:192.168.205.200,子网掩码:255.255.255.0,默认网关:
192.168.205.100,首选DNS服务器:192.168.205.100(注意:这里的网关和DNS必须用服务器无线网卡的IP地址)),其中192.168.205.200的200不能和其它终端或服务器的100一样哦(废话),点一次“确定”,在“无线网络连接X属性”窗口选择“无线网络配置”页面,勾选“用Windows配置我的无线网络设置,这又是一个关键,OK,记得点“确定”关闭窗口。

点对点通信系统ppt课件

点对点通信系统ppt课件
简单的说,P2P直接将人们联系起来,让人们通过互联网直 接交互。P2P使得网络上的沟通变得容易、更直接共享和交 互,真正地消除中间商。P2P就是人可以直接连接到其他用 户的计算机、交换文件,而不是像过去那样连接到服务器去 浏览与下载。P2P另一个重要特点是改变互联网现在的以大 网站为中心的状态、重返“非中心化”,并把权力交还给用 户。 P2P看起来似乎很新,但是正如B2C、B2B是将现实世 界中很平常的东西移植到互联网上一样,P2P并不是什么新 东西。在现实生活中我们每天都按照P2P模式面对面地或者 通过电话交流和沟通。
系统简介
本程序使用VB语言编程,使用WinSock控件 完成的点对点(P2P)聊天和文件传输程序。 可以实现两台机器间互发消息,并且有聊天 和文件传输记录,安全可靠。
p2p的概念
P2P是peer-to-peer的缩写,peer在英语里有“(地位、能 力等)同等者”、“同事”和“伙伴”等意义。这样一来, P2P也就可以理解为“伙伴对伙伴”的意思,或称为对等联 网。目前人们认为其在加强网络上人的交流、文件交换、分 布计算等方面大有前途。
系统功能
1、服务器端服务 2、客户机服务 3、上网服务 4、点对点实时信息传输
模块结构图登录 主界面服客上
退











客户机模块IPO图
I
连接服务 器
P
提供相 应的界 面供操 作人员 录入
O 通信
服务器模块IPO图
I
测试网 络
P
提供相 应的界 面供操 作人员 录入
O 通信
②确定模块结构,划分功能模块,将软件功能需求分配给所 划分的最小单元模块。确定模块间的联系,确定数据结构、 文件结构、数据库模式,确定测试方法与策略。

局域网点对点通信系统

局域网点对点通信系统

毕业设计(论文)局域网点对点通信系统设计学院(系)里仁学院年级专业04级电子信息工程2班学生姓名檀慧超指导教师张涛答辩日期2008.6.22摘要摘要所谓网络中的点对点通信是实现网络上不同计算机之间,不经过任何中继设备而直接交换数据或服务的一种技术。

由于允许网络中任何一台计算机可以直接连到网络中的其他计算机,并与之进行数据交换,这样既可以消除中间环节,也使得网络上的沟通变得更加容易、更加直接。

本文介绍的是一种使用Winsock编程技术,基于TCP/IP协议的、面向连接的流式套接字网络通信程序设计。

本文首先介绍了计算机通信网的基础理论,主要介绍了计算机通信网的组成、通信协议和TCP/IP模型。

其次,详细阐述了Visual C++.NET网络通信编程知识,其中重点介绍了窗体设计和Windows Socket。

最后给出了利用VC中Winsock控件编写的服务端、客户端通信程序的基本思路,及部分程序。

关键词点对点;TCP/IP;Socket摘要AbstractPeer to peer communication is a computer communication method which is used in different computers to transmit data or services directly, without other device. As the network allows any computer connect to other computer directly and exchange data with each other, it eliminates intermediate links, make communication much easier, more directly. The paper introduces method through Winsock program , based on TCP/IP and face connect was set up.At first, the paper introduces the base theory of computer communication, include the composition of computer communication network, communication protocol and TCP/IP model. Secondly, elaborate the communication theory of Visual C++.NET, which focuses on Windows Socket and forms design. In the end, we give the basic thoughts of sever and client translated program made by Winsock controller by VC.Keywords Peer to Peer;TCP/IP;Socket;燕山大学本科生毕业设计(论文)目录摘要 (I)Ab stra ct ...................................................................................................... I I 目录 (III)第1章绪论 (1)1.1课题背景 (1)1.1.1P2P技术的国内外现状 (1)1.1.2P2P技术的研究成果及发展趋势 (2)1.1.3P2P技术所存在的问题 (3)1.2本文主要研究内容 (4)第2章计算机通信基础及相关原理 (5)2.1计算机通信网通信原理 (5)2.1.1计算机通信的概念 (5)2.1.2计算机通信网的组成及网络结构 (6)2.1.3TCP/IP协议模型 (7)2.2本章小结 (9)第3章Visual C++.NET网络通信编程原理 (10)3.1窗口与消息 (10)3.2MFC应用基础 (12)3.3W INDOWS窗体设计 (13)3.4W INDOWS S OCKET概念及编程机理 (15)3.4.1Windows Sockets套接字及分类 (15)3.4.2套接字函数 (16)3.5本章小结 (20)第4章软件程序设计 (21)燕山大学本科生毕业设计(论文)4.1程序流程框图 (21)4.2主要程序及功能 (22)4.2.1TCPSocket类的封装 (22)4.2.2对话框添加相应控件 (25)4.2.3对话框初始化 (32)4.2.4发送和接收数据线程 (33)4.3本章小结 (35)结论 (36)参考文献 (37)致谢 (38)附录1 (I)附录2 (IV)附录3 (IX)燕山大学本科生毕业设计(论文)第1章绪论1.1课题背景1.1.1P2P技术的国内外现状目前计算机通信最常用的方法主要是串口通信,USB通信和网络通信。

winsock_winsockUDP点对点接收消息问题(特急)

winsock_winsockUDP点对点接收消息问题(特急)

winsock:winsock UDP 点对点接收消息问题(特急)傲博技术知识库 / ĵ:http://BCBNetwork/Article12977.html建立一个socket后向服务器发送消息(循环发送)~但服务器只能接收一条消息(其它机子发时也只能收到一条消息)~其它消息接收不到~发送消息有时间间隔::Sleep(100);客户端也只能偶尔收到一条来自服务器的回应消息。

为什么??我百思不得其解~~如今~~~求求求求解help me 代码贴出来。

大致代码如下:如还不清楚的~我还会继续把代码贴出来~~~struct stLOGINMSG{char username[20];char password[20];};struct stSERVERTOCLIENTMSG{int iMsgType;//自定义的消息类型union _message{stLOGINMSG loginmessage; //登陆stLOGOUTMSG logoutmessage; //注销stUSERLISTNODE userlist; //用户列表}Message;};//下面用到的SockSrvIP,ServerPort都是全局,定义好了的void __fastcall TThreadLogin::Execute(){char szTmp[256],buf[2096];unsigned long nAddr = inet_addr(SockSrvIP.Trim().c_str());//服务器IPif ( nAddr == INADDR_NONE){DealException( "无效的IP地址 ", "错误 ",MB_OK+MB_ICONERROR,true); return;}::ZeroMemory(&GxtMain-> wsaData,sizeof(WSAData));WORD version = MAKEWORD(2,0);if ( ::WSAStartup(version,&GxtMain-> wsaData) !=0 ){DealException( "Failed to initial winsock enviroment! ", "Gxt Error ",MB_OK+MB_ICONERROR,true);return;}char ComputerName[255];gethostname(ComputerName,255);//得本计算机名struct hostent *he = gethostbyname(ComputerName);if ( !he ){DealException( "Failed to get information to host! ", "Gxt Error ",MB_OK+MB_ICONERROR,true);::WSACleanup();return;}//建立一个新的SocketGxtMain-> Socket = INVALID_SOCKET;//UDP方式GxtMain-> Socket = socket(AF_INET,SOCK_DGRAM,0);if ( GxtMain-> Socket == INVALID_SOCKET){DealException( "Failed to create a new socket! ", "Gxt Error",MB_OK+MB_ICONERROR,true);::WSACleanup();return;}struct sockaddr_in client;unsigned long nClient;memcpy(&nClient,he-> h_addr_list[0],sizeof(int));if ( nClient == INADDR_NONE){DealException( "无法获取客户端IP地址 ", "Gxt Error",MB_OK+MB_ICONERROR,true);closesocket(GxtMain-> Socket);::WSACleanup();return;}client.sin_family = AF_INET;client.sin_port = 0;client.sin_addr.S_un.S_addr = (int)nClient;// INADDR_ANY;if ( ::bind(GxtMain-> Socket,(struct sockaddr*)&client,sizeof(struct sockaddr)) == SOCKET_ERROR){DealException( "Failed to bind socket! ", "Gxt Error",MB_OK+MB_ICONERROR,true);::WSACleanup();closesocket(GxtMain-> Socket);return;}sockaddr_in remote;remote.sin_addr.S_un.S_addr = inet_addr(SockSrvIP.c_str());remote.sin_family = AF_INET;remote.sin_port = htons(SockSrvPort);stSERVERTOCLIENTMSG sendbuf;sendbuf.iMsgType = LOGIN; //KEEPstrncpy(ername, GxtMain-> edtUserName-> Text.Trim().c_str(), 20);int sReturn;sReturn = sendto(GxtMain-> Socket, (const char*)&sendbuf, sizeof(sendbuf), 0, (const sockaddr*)&remote,sizeof(remote)+1);while(!Terminated){::Sleep(500);int iread;sockaddr_in remote;int sinlen = sizeof(remote);stSERVERTOCLIENTMSG Msg;sinlen = sizeof(struct sockaddr_in);iread = ::recvfrom(GxtMain-> Socket, (char *)&Msg, sizeof(Msg), 0, (sockaddr *)&remote, &sinlen);if (iread < 0 ){ViewLogMsg = "iread <0 ";Synchronize(LogMsg);continue;}try{ViewLogMsg = "收到消息: "+IntToStr(Msg.iMsgType)+ "Server Port: " + IntToStr(ntohs(remote.sin_port))+ "MSG: " + (AnsiString)ername;Synchronize(LogMsg);}catch(Exception &E){ViewLogMsg = "error: "+E.Message;Synchronize(LogMsg);}::Sleep(100);sockaddr_in re;re.sin_addr.S_un.S_addr = inet_addr(SockSrvIP.c_str());re.sin_family = AF_INET;re.sin_port = htons(SockSrvPort);stSERVERTOCLIENTMSG sendbuf;sendbuf.iMsgType = KEEP; //LOGINstrncpy(ername, GxtMain-> edtUserName-> Text.Trim().c_str(), 20);sendto(GxtMain-> Socket, (const char*)&sendbuf, sizeof(sendbuf), 0, (const sockaddr*)&re,sizeof(re)+1);::Sleep(100);}} 没看出什么问题。

基于WinSock控件实现局域网上的点到点通信

基于WinSock控件实现局域网上的点到点通信

基于W in S o ck 控件实现局域网上的Ξ点到点通信3陆继翔, 余隋怀, 刘利章(西北工业大学, 西安 710072)[ 摘要 ] 介绍了局域网上点到点通信的基本原理, 实现了一种基于W i n S o c k 控件的局域网上的点到点通信。

[ 关键词 ] W i n S o c k ; 局域网; 点到点通信 [ 中图分类号 ] TN 914[ 文献标识码 ] APo in t to Po in t Comm un ica t i on s Ba sed onW in Sock in the L oca l A r ea Ne t workL U J i 2x ian g , YU Su i 2h u a i , L I U L i 2zh a n g(N o r t hw e s te r n Po l y t ech n ica l U n ive r s ity , X i ’an 710072, C h in a )A b stra c t : T h is p a p e r in t r o d uce s th e ba s ic p r i n c i p le o f p o in t to po in t co m m un ica t i o n s in th e L o c a l A rea N e t w o rk , an d it accom p lish e s th e po in t to p o in t com m un ica t i o n s ba s ed o n W in S o c k in th e L o c a l A rea N e t w o rk . Key words : W in S o c k ; lo c a l a r ea n e t w o rk ; p o in t to po in t com m un ica t i o n s要网络软件的支持, 仅需用电缆线将各工作站上的网络接口卡连接起来。

用Winsock实现点对点通信

用Winsock实现点对点通信

用Winsock实现点对点通信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属性中。

创建一个应用程序时,首先要确定你建立的是客户方应用还是服务器服务,只有建立的服务器应用开始工作,并进入监听状态时,客户应用程序才开始建立连接,进入正常的通信状态。

笔者建立了一个应用程序,它的功能是当客户方的鼠标移动时,服务器应用程序上能够实时显示该鼠标的位置。

VBwinsock中基于TCPIP协议的点对点文件传输

VBwinsock中基于TCPIP协议的点对点文件传输

VB中基于TCP/IP协议的点对点文件传输摘要随着网络的普及,网络编程显得尤其重要。

本文使用Winsock控件实现两台计算机间的文件传输,描述了Winsock控件的使用方法及有关文件传输的算法。

关键词TCP/IP协议,Winsock控件,网络编程,文件传输,断点续传。

随着计算机网络的迅速发展,人们的生活越来越离不开网络,如今网络编程已成为计算机发展的热点,而在众多的网络通信中,又以TCP/IP协议最为流行。

本文讨论的Winsock控件,提供了访问TCP/IP网络的捷径,使用它可以不必了解TCP/IP的细节和调用Winsock API,只要设置好相应的属性和触发事件后的处理,就可以实现计算机之间的数据通信。

一、Winsock控件Winsock即Windows Sockets规范的简称,是目前最流行的网络通信应用程序接口之一。

所谓Socket,通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。

应用程序通常通过“套接字”向网络发出请求或者应答网络请求。

Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。

Winsock控件工作在传输层上,在这一层上,目前主要流行的协议包括TCP和UDP 两种:TCP协议适用于那些对于数据的可靠性要求比较高的情况,目前大多数的网络应用层协议都是基于TCP协议的(例如常用的HTTP、FTP、SMTP、POP3等协议);UDP协议适用于对数据可靠性要求不高而对速度要求较高的情况,这里主要包括一些需要大流量的(例如Real公司的RTSP协议,腾讯公司的QQ协议等)。

二、Winsock控件通信的工作原理Winsock控件是基于Socket规范创建的,所以其通信的实质是对Socket接口进行数据的读写操作。

如果两个应用程序需要通信,它们可以通过使用Socket类来建立套接字连接,可以将这个过程想象为一次电话呼叫过程:呼叫者通过拨号与被呼叫者连接,当电话接通时,双方都可以自由通话了,只不过这里的呼叫者被称为“客户”,被呼叫者则称为“服务器”,而号码则为“IP地址+端口”,但在建立连接之前,必须由“客户”发出呼叫,且此时的“服务器”正在监听。

基于Winsock技术实现点对点通信

基于Winsock技术实现点对点通信

基于Winsock技术实现点对点通信
温文;温凯峰
【期刊名称】《云南民族大学学报(自然科学版)》
【年(卷),期】2006(015)004
【摘要】通过Winsock编程技术,实现了对基于TCP/IP协议的、面向连接的流方式套接字网络通信程序设计,阐述了在线点对点通信的技术支持,给出了利用VB中的Winsock控件编写服务器端、客户端通信程序的基本思路.
【总页数】4页(P302-305)
【作者】温文;温凯峰
【作者单位】嘉应学院,网络中心,广东,梅州,514015;嘉应学院,网络中心,广东,梅州,514015
【正文语种】中文
【中图分类】TP393.04
【相关文献】
1.基于WinSock技术的局域匿即时通信系统的设计与实现 [J], 罗广华
2.基于Winsock2SPI和PKI技术实现电子商务中邮件系统数字签名 [J], 商林
3.基于Winsock技术实现股市行情数据实时更新 [J], 杨勇
4.基于Winsock技术的计算机监控系统的实现 [J], 束方志
5.基于Winsock技术的屏幕广播技术的研究及实现 [J], 赵宪明;韩雄
因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用Winsock实现点对点通信
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.加入如下代码:
Private Sub Form_Load()
tcpServer.LocalPort = 1001
tcpServer.Localhost = ″servser″tcpServer.remotePort = 1002
tcpServer.Localhost = ″klint″tcpServer.Listen
End Sub
′连接检查
Private Sub tcpServer_ConnectionRequest _ (ByVal requestID As Long)
If tcpServer.State <> sckClosed Then _ tcpServer.Close
tcpServer.Accept requestID
End Sub
′发送数据
Private Sub frmserver_monsemove(x,y) tcpServer.SendData ″x″& str(x) tcpServer.SendData ″y″& str(y)
End Sub
建立客户应用的方法为:
1.创建一个新的标准EXE文件;
2.加入一个Winsock控件;
3.加入两个TEXT框—— txt_x和 txt_y;
4.加入如下代码:
Private Sub Form_Load()
tcpServer.LocalPort = 1002
tcpServer.Localhost = ″klint″tcpServer.remotePort = 1001
tcpServer.Localhost = ″servser″tcpServer.Listen
End Sub
′连接检查
Private Sub tcpklint_ConnectionRequest _ (ByVal requestID As Long)
If tcpklint.State <> sckClosed Then _ tcpklint.Close
tcpklint.Accept requestID
End Sub
Private Sub tcpClient_DataArrival _ (ByVal bytesTotal As Long)
Dim strData As String
tcpklint.GetData strData
if left(strData,1)=″X″then
txt_x.Text = strData
else
txt_y.Text = strData
endif
End Sub
以上例程实现的是一个非常简单的点对点通信,在此基础上略加改造,可以形
成功能复杂的实时计算机网络A-A交互通信系统,用于控制、图形仿真等。

使用UDP协议建立对等通信和通过TCP建立客户/服务器通信的方法略有不同,
它不需要建立客户和服务器,而是建立对等通信。

此过程通过以下几步实现:
1.设定Winsock的RemoteHost 属性为一个通信的计算机名称;
2.设定 RemotePort 为一个接口号;
3.调用Winsock的Bind 事件绑定本地的接口号。

具体设定方法为:
Private Sub Form_Load()
With Winsock1
.RemoteHost= ″PeerB″
.RemotePort = 1001 ′远程连接号
.Bind 1002
′绑定的本地号
End With
End Sub
程序的其它部分与TCP方法类似,即通过SendData 和GetData 方法发送或提
取数据。

UDP和TCP协议在使用中各有特点,如果灵活使用,可以得到很好的效果。

令人欣慰的是,VB5.0中Winsock给我们提供了一种简便的数据传送方法,使我们得
以轻松地实现网络点对点通信。

相关文档
最新文档