说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

网络编程,发送对话

编辑:说三道四文库 发布时间:2017-11-21 11:59
HTML文档下载 WORD文档下载 PDF文档下载
对于winsock这个我了解得不太多,
希望大家能帮帮我,
比如举过例子怎么样在一台机器上面接爱发送过来的信息呢?
服务器:
窗口上画一个winsock。
Private Sub Form_Load()

wsk.Protocol = sckTCPProtocol
wsk.LocalPort = 5555
wsk.Listen

End Sub

Private Sub wsk_ConnectionRequest(ByVal requestID As Long)

wsk.Accept requestID

End Sub

Private Sub wsk_DataArrival(ByVal bytesTotal As Long)

Dim strData As String
wsk.GetData strData
MsgBox strData

End Sub

客户端:
窗口上画一个winsock。
Private Sub Command1_Click()

wsk.SendData "test send data"

End Sub

Private Sub Form_Load()

wsk.Protocol = sckTCPProtocol
wsk.RemoteHostIP = "192.168.0.1"
wsk.RemotePort = 5555
wsk.Connect

End Sub

Private Sub wsk_DataArrival(ByVal bytesTotal As Long)

Dim strData As String
wsk.GetData strData
MsgBox strData

End Sub
加入winsock,命名为UDP
'发送
UDP.Protocol = sckUDPProtocol
UDP.Bind 4321
UDP.RemoteHost = "172.0.0.1" 
UDP.RemotePort = 1234
UDP.SendData Msg


'接受
UDP.Protocol = sckUDPProtocol
UDP.Bind 1234


Private Sub UDP_DataArrival(ByVal bytesTotal As Long)
    Dim Msg As String, Item As String
    
    On Error Resume Next
    UDP.GetData Msg, vbString
    If Len(Msg) = 0 Then
        Exit Sub
    End If
    Debug.Print Msg
End Sub

出现问题:
所需事物或错误请求协议或连接协议
能放在一个窗体上面吗望帮助
好象有人做过这个东西。要是我没有记错的话。CSDN中有现成的例子

TCP 连接初步
如果应用程序要使用 TCP 协议,那么首先必须决定应用程序是服务器还是客户端。如果要创建一个服务器端,那么应用程序需要“监听”指定的端口。当客户端提出连接请求时,服务器端能够接受请求并建立连接。在连接建立之后,客户端与服务器端可以自由地互相通讯。
下列步骤创建一个非常简单的服务器:
创建一个 TCP 服务器
1 创建新的 Standard EXE 工程。
2 将缺省窗体的名称改为 frmServer。
3 将窗体的标题改为“TCP Server”。
4 将一个 Winsock 控件拖到窗体上,并将它的名字改为 tcpServer。
5 在窗体上添加两个 TextBox 控件。将第一个命名为 txtSendData,第二个为 txtOutput。
6 为窗体添加如下的代码。

Private Sub Form_Load()
'将 LocalPort 属性设置为一个整数。
'然后调用 Listen 方法。
tcpServer.LocalPort = 1001
tcpServer.Listen 
frmClient.Show '显示客户端的窗体。
End Sub

Private Sub tcpServer_ConnectionRequest _
(ByVal requestID As Long)
'检查控件的 State 属性是否为关闭的。
'如果不是,
'在接受新的连接之前先关闭此连接。
If tcpServer.State <> sckClosed Then _
tcpServer.Close
'接受具有 requestID 参数的
'连接。
tcpServer.Accept requestID
End Sub

Private Sub txtSendData_Change()
'名为 txtSendData 的 TextBox 控件中
'包含了要发送的数据。当用户往文本框中
'键入数据时,使用 SendData 方法
'发送输入的字符串。
tcpServer.SendData txtSendData.Text
End Sub

Private Sub tcpServer_DataArrival _
(ByVal bytesTotal As Long)
'为进入的数据声明一个变量。
'调用 GetData 方法,并将数据赋予名为 txtOutput 
'的 TextBox 的 Text 属性。
Dim strData As String
tcpServer.GetData strData
txtOutput.Text = strData
End Sub

上面的步骤创建了一个简单的服务器应用程序。为了使它能够工作,还必须为它创建一个客户端的应用程序。
创建 TCP 客户端
1 在工程中添加一个新的窗体,将其命名为 frmClient。
2 将窗体的标题改为“TCP Client”。
3 在窗体中添加一个 Winsock 控件,并将其命名为 tcpClient。
4 在 frmClient 中添加两个 TextBox 控件。将第一个命名为 txtSend,第二个为 txtOutput。
5 在窗体上放一个 CommandButton 控件,并将其命名为 cmdConnect。
6 将 CommandButton 控件的标题改为 Connect。
7 在窗体中添加如下的代码。

重点   必须将 RemoteHost 属性值修改为您的计算机的名字。

Private Sub Form_Load()
'Winsock 控件的名字为 tcpClient。
'注意:要指定远程主机,可以使用
' IP 地址(例如:"121.111.1.1"),也可以使用
'计算机的“好听的名字”如下所示。
tcpClient.RemoteHost = "RemoteComputerName"
tcpClient.RemotePort = 1001
End Sub

Private Sub cmdConnect_Click()
'调用 Connect 方法,初始化连接。
tcpClient.Connect
End Sub

Private Sub txtSendData_Change()
tcpClient.SendData txtSend.Text
End Sub

Private Sub tcpClient_DataArrival _
(ByVal bytesTotal As Long)
Dim strData As String
tcpClient.GetData strData
txtOutput.Text = strData
End Sub

上面的代码创建了一个简单的客户/服务器模式的应用程序。我们可以将两者都运行起来:运行工程,然后单击“连接”。在两个窗体之一的 txtSendData 文本框中键入文本,可以看到同样的文字将出现在另一个窗体的 txtOutput 文本框中。
接受多个连接请求
上面设计的基本服务器只能接受一个连接请求。通过创建控件数组,使用一个控件也可以同时接受多个连接请求。利用这种方法,不再需要关闭连接,而只需创建新的控件实例(通过设置其索引属性),然后在新的实例上调用 Accept 方法。
下面的代码假定名为 sckServer 的窗体上有一个 Winsock 控件,它的 Index 属性被设置为 0;控件是控件数组的一部分。在声明部分,声明了一个模块级的变量 intMax。在窗体的 Load 事件中,intMax 被设置为 0,数组中第一个控件的 LocalPort 属性被设置为 1001。然后调用控件的 Listen 方法,使之成为“监听”控件。在连接请求到达时,代码将检测 Index 是否为 0(“监听”控件的值)。如果为 0,监听控件将增加 intMax 的值,并使用该号码来创建新的控件实例。然后,使用新的控件实例接受连接请求。
Private intMax As Long

Private Sub Form_Load()
intMax = 0
sckServer(0).LocalPort = 1001
sckServer(0).Listen
End Sub

Private Sub sckServer_ConnectionRequest _
(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
intMax = intMax + 1
Load sckServer(intMax)
sckServer(intMax).LocalPort = 0
sckServer(intMax).Accept requestID
Load txtData(intMax)
End If
End Sub


UDP 初步
创建 UDP 应用程序比创建 TCP 应用程序还要简单,因为 UDP 协议不需要显式的连接。在上面的 TCP 应用程序中,一个 Winsock 控件必须显式地进行“监听”,另一个必须使用 Connect 方法初始化连接。
UDP 协议不需要显式的连接。要在两个控件中间发送数据,只需进行以下的三步即可(在连接的双方):
1. 将 RemoteHost 属性设置为另一台计算机的名称。
2. 将 RemotePort 属性设置为第二个控件的 LocalPort 属性。
3. 调用 Bind 方法,指定使用的 LocalPort。(下面将详细地讨论该方法。)

因为两台计算机的地位可以看成“平等的”,这种应用程序也被称为点到点的。为了具体说明这个问题,下面将创建一个“聊天”应用程序,两个人可以通过它进行实时的交谈。
创建一个 UDP 伙伴
1 创建一个新的 Standard EXE 工程。
2 将缺省的窗体的名称修改为 frmPeerA。
3 将窗体的标题修改为“Peer A”。
4 在窗体中放入一个 Winsock 控件,并将其命名为 udpPeerA。
5 在“属性”页上,单击“协议”并将协议修改为 UDPProtocol。
6 在窗体中添加两个 TextBox 控件。将第一个命名为 txtSend,第二个命名为 txtOutput。
7 为窗体增加如下的代码。

Private Sub Form_Load()
'控件的名字为 udpPeerA
With udpPeerA
'重点:必须将 RemoteHost 的值
'修改为计算机的名字。
.RemoteHost= "PeerB" 
.RemotePort = 1001   '连接的端口号。
.Bind 1002 '绑定到本地的端口。
End With
frmPeerB.Show  '显示第二个窗体。
End Sub

Private Sub txtSend_Change()
'在键入文本时,立即将其发送出去。
udpPeerA.SendData txtSend.Text
End Sub

Private Sub udpPeerA_DataArrival _
(ByVal bytesTotal As Long)
Dim strData As String
udpPeerA.GetData strData
txtOutput.Text = strData
End Sub

创建第二个 UDP 伙伴
1 在工程中添加一个标准窗体。
2 将窗体的名字修改为 frmPeerB。
3 将窗体的标题修改为“Peer B”。
4 在窗体中放入一个 Winsock 控件,并将其命名为 udpPeerB。
5 在“属性”页上,单击“协议”并将协议修改为“UDPProtocol”。
6 在窗体上添加两个 TextBox 控件。将第一个命名为 txtSend,第二个命名为 txtOutput。
7 在窗体中添加如下的代码。

Private Sub Form_Load()
'控件的名字为 udpPeerB。
With udpPeerB
'重点:必须将 RemoteHost 的值改为
'计算机的名字。
.RemoteHost= "PeerA"
.RemotePort = 1002 '要连接的端口。
.Bind 1001 '绑定到本地的端口上。
End With
End Sub

Private Sub txtSend_Change()
'在键入后立即发送文本。
udpPeerB.SendData txtSend.Text
End Sub

Private Sub udpPeerB_DataArrival _
(ByVal bytesTotal As Long)
Dim strData As String
udpPeerB.GetData strData
txtOutput.Text = strData
End Sub

如果要试用上面的例子,按 F5 键运行工程,然后在两个窗体的 txtSend TextBox 中分别键入一些文本。键入的文字将出现在另一个窗体的 txtOutput TextBox 中。
关于 Bind 方法
在上面的代码中,在创建 UDP 应用程序时调用了 Bind 方法,这是必须的。Bind 方法的作用是为控件“保留”一个本地端口。例如,如果将控件绑定到 1001 号端口,那么其它应用程序将不能使用该端口进行“监听”。该方法阻止其它应用程序使用同样的端口。
Bind 方法的第二个参数是任选的。如果计算机上存在多个网络适配器,可以用 LocalIP 参数来指定使用哪一个适配器。如果忽略该参数,控件使用的将是计算机上“控制面板”设置中“网络”控制面板对话框中列出的第一个适配器。
在使用 UDP 协议的时候,可以任意地改变 RemoteHost 和 RemotePort 属性,同时始终保持绑定在同一个 LocalPort 上。TCP 协议与此不同,在改变 RemoteHost 和 RemotePort 属性之前,必须先关闭连接。

传微软考虑重大重组 或势在必行 云适配CEO陈本峰:8年磨一剑 Splashtop企业应用:SplashApp让办公移动起来 时空旅行+内付费“植物大战僵尸2”下月18日全球同步发行! 中移动推网络电话Jego 后来者能否居上? 防止数据泄露:BYOD下的管理员5大妙招 咕咚副总裁司建铭谈移动时代的“软硬整合” 未来的物联网结点:可穿戴设备 应用开发的4个技巧,让程序能真正为用户使用 Google早期的10个API:它们现在在哪? 为啥微软开发产品总是慢半拍? Visual Studio 2013 Preview新功能预览 “中国手机游戏四月流水榜”出炉 超半数基于Cocos2d-x引擎 为移动而设计之信息架构篇 难逃厄运:Zynga将关闭Draw Something母公司OMGPOP 直接拿来用!最火的iOS开源项目(一) 是时候抛弃Eclipse转向IntelliJ了 Arrow:轻量级的Python时间日期库 编程语言API,你最青睐哪一款? 推动新输入方式发展:英特尔为感知计算设1亿美元基金 AWS到底有多大?目前看来有158000台服务器 C语言实现树的动态查找 第五届中国云计算大会于北京隆重举行 改变企业移动化:新Google地图API支持用户定制 诺基亚旗舰手机EOS真机图曝光 配备“巨型”摄像头 走进豆瓣:豆瓣的技术架构与团队文化分享 加速Web开发的10款HTML5工具 微软式微?AMD、英特尔等开始疏远Windows 语音技术现状:四千万突破语音产业的技术壁垒? 万维网联盟W3C推荐Web性能API 微软郑子颖:Windows Azure如何支持开源系统和软件? 完成端口中如何在接收状态下发送数据? 那位大哥能帮忙从sourceforge上下个工程,高分相送,分可以再加(急) (急)如何替换文本中的“+” 请问怎么看到DevC++运行后的结果啊。屏幕一闪就过去了 关于控件制作的两个问题 那位大哥能帮忙从sourceforge上下个工程,高分相送,分可以再加(急) 如何才能在Edit控件中显示大量的数据?? smoke,你好,很高兴能认识你! 大虾们给点意见:这么编写W77E58的软件看门狗是否妥当? 请问怎么用MAPI控件发送HTML格式的邮件啊 小问题,好郁闷!! 父窗口弹出一个子窗口,如果在子窗口点击鼠标,消息是怎么在父子窗口之间折腾的呢? 如何在接受到两个消息后才执行一段代码呢? 怎么定义一个三维数组 那位大哥能告诉我75,000日圆值多少人民币啊???? 安装了DirectX 9b之后Media Player 9.0总是出问题。 局域网怎么装打印机? 为什么控制面板中的“添加删除程序”不能用了?在线等待,请各位帮忙。 请问高手如何设置绘图背景为黑色,并且哪种绘制模式不影响画图的画笔颜色 《程序员》的文章错字太多!!!!!!!!!!!! 关于指纹采集识别 高分求《j2EE服务器端高级编程》这本书的源码 MAKEWORD宏从哪里找到中文解释。 为何在重载CreateParams后指定Form的Height值小于某个值后就不会再小? 开发一个基于WEB的ASP仓库管理,用什么技术比较好。 怎样让弹出对话框居中显示 我用Server.Transfer来做两个页面之间传值,我怎么让页面成为新窗口打开呀,100分 高分请教XML高手 在InterDev中,我什么说我不能连接web server 请问 怎么响应一个按钮打开一个新页面,同时关闭旧页面 各位PM进来谈谈自己的经历和经验教训。 picturebox控件问题 jdbc的奇怪限制,不能reread row data UNIX支持中文否,请推荐UNIX好书 高分求助:怎样发布sapi.dll 我发现我变笨了!!或许我本来就很笨。但是问句实在的:IT会使人变笨吗? hal.dll文件丢失!winxp修复的问题!急! pb如何连接execl 用Windows2000Internet连接共享出现的问题,请各位大侠解决一下! 关于数据库字段大小问题 ★★如何给一个Dialog加背景图片?★★ MSDN Library 2003中文版3CD下载 我用access+adoquery+DBgrid,我在拖动改变dbgrid的列宽时,为何会报错? 关于软件汉化的问题。 请教:可以从硬盘上直接安装linux吗? C语言二级考什么题型 MYSQL是不是不能建视图啊?新手清多多指教 还是ASP与SQL联不上的问题,在线等待 请问:C:\Documents and Settings\user\Local Settings\Temporary Internet Files里的内容怎么删除 紧急求助!sqlserver服务启动不了 怎么知道当前这台UNIX的IP地址 如图,点E在BC上,CD=CE,∠D=74°,AB=∥CD,求角B度数. s=(x+1/y)+(x^2+1/y^2)+····(x^n+1/y^n)怎么算 如果c和d只有公因数1,那么c和d的最小公倍数是 速度! 比60吨少20%是( )吨.( )km的60%是9km要算式! 一段路修了36km比全长的60%多9km,这条路多长 I want someone () I can tell everything A Whom B who C to whom D that 正方形的面积和长成正比例吗?为什么?请说准确一点. 求苏教版五年级暑假作业答案…… 某同学做了A、B、C三组实验,根据发生反应的现象及原理……某同学做了A、B、C三组实验,根据发生反应的现象及原理,进行总结归纳并回答问题:A 实验:在氯化镁溶液中滴入氢氧化钠溶液B 实 如何消除压力? 转载 他们说人生一出戏,何必太认真 这句话怎么理解 盘点基层干部“怕”事心态:图太平念“近七成受访者反对延迟退休 73.5%官员否认“血站卖血给药厂”:全供医院专家:腐败及腐败带来分配不公问题仍是奥巴马豪华座驾“野兽”细节曝光 可抵律师申请公开转基因信息被驳 称将诉农奥巴马豪华座驾“野兽”细节曝光 可抵医生举报副县长公款旅游 开发商10万黑龙江非转基因大豆产区面积锐减 九成伊拉克发生多起暴力袭击致24人死亡美国去年吸引外国直接投资1660亿美拆迁工地烧垃圾 洒水车赶来灭火□追评1+1骗取社保金将追究刑责两架俄战机逼近英领空林丹早已申请外卡风雪过戈壁 眉毛挂冰碴乘客上公交 被门夹伤脚68万大奖让他儿子圆了大学梦盐业体制改革正提速乌军队激战东部城市闽企夹克衫销量全国第一
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘