| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 140 人关注过本帖
标题:利用winsock,协议类型upd,在A 电脑上发送消请教息,B电脑接收消息,大部电 ...
只看楼主 加入收藏
wxzd123
Rank: 2
等 级:论坛游民
帖 子:462
专家分:96
注 册:2012-9-6
结帖率:87.27%
收藏
 问题点数:20 回复次数:7 
利用winsock,协议类型upd,在A 电脑上发送消请教息,B电脑接收消息,大部电脑正常,个别电脑收不到?
请教利用winsock,协议类型upd,在A 电脑上发送消息,B电脑接收消息,大部电脑正常,个别电脑收不到?代码应该没有问题,应该个别电脑系统问题,从那些方面找原因?有什么工具测试修改吗?谢谢
搜索更多相关主题的帖子: 接收 协议 消息 winsock 发送 
前天 14:42
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:1021
专家分:1535
注 册:2021-10-13
收藏
得分:0 
upload your code
前天 17:56
wxzd123
Rank: 2
等 级:论坛游民
帖 子:462
专家分:96
注 册:2012-9-6
收藏
得分:0 
回复 2楼 sam_jiang 老师源代码
测试.rar (270.57 KB)
前天 21:10
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:1021
专家分:1535
注 册:2021-10-13
收藏
得分:0 
看了你的代码,你没有bind一个端口,也就是说,你可以向192.168.31.110 的58001 端口发送数据,udp协议是不管对方有没有接收的,发过去就完了。

对方电脑如果运行了同样的程序,是没有办法发送或接收的。

假设A电脑的ip是192.168.31.10,那么你应该bind 58002端口,remoteport=58001,

那么另外一台电脑的IP地址192.168.31.110,它应该bind 58001 端口,romoteport=58002。

这样,这两台电脑就可以通讯了。
前天 22:31
wxzd123
Rank: 2
等 级:论坛游民
帖 子:462
专家分:96
注 册:2012-9-6
收藏
得分:0 
udp=Val(Filetostr("udp.txt"))
Thisform.sock1.Object.Bind(udp)
老师这个不是吗?这样设置不对吗
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
两个电脑都可以互相发送接收
昨天 08:40
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:1021
专家分:1535
注 册:2021-10-13
收藏
得分:0 
你的form的init事件,这里绑定的端口和远程端口居然是同一个端口???
看你用了2个winsock控件,其实一个便够了。

udp=Val(Filetostr(LOCFILE("udp.txt"))) &&58001
ip=Filetostr(LOCFILE("ip.txt"))
ip1=Left(ip,Rat(".",ip)-1)+".255"
Thisform.sock1.Object.Bind(udp)
Thisform.fs.Object.RemoteHost=ip1 &&要连接的远程计算机的名称或IP地址 字符    否送字符
Thisform.fs.Object.RemotePort=udp  &&设置要连接的远程端口号   数字
PUBLIC cs
cs=1
thisform.Tag='jj'
Set Library To myFll
ThisForm.Label7.Caption =GetLocalIP()

ThisForm.Label8.Caption=Getwordnum(CURDIR(),(OCCURS('\',CURDIR()))-1,'\')+'IP:'


创建一个UDP应用程序比创建TCP程序更简单,因为UDP协议不需要一个确定的连接。

UDP协议不需要明确的连接。要在2个控件之间传送数据,(连接的双方)必须完成三个步骤:

·确定远程主机属性为对方的计算机名;
·确定远程主机属性为第二个控件的本地端口属性;
·调用约定方法指定要被使用的本地端口。

你可以参考这篇文章,希望对你有帮助!
https://

[此贴子已经被作者于2025-10-19 20:47编辑过]

昨晚 20:45
wxzd123
Rank: 2
等 级:论坛游民
帖 子:462
专家分:96
注 册:2012-9-6
收藏
得分:0 
谢谢sam_jiang的指导,除了关闭防火墙和一些防护软件外还需要注意什么?
昨晚 20:57
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:1021
专家分:1535
注 册:2021-10-13
收藏
得分:0 
回复 7楼 wxzd123
跟防火墙什么安全软件没有关系吧?
还有,确保2台电脑在同一个局域网里面。。。

给你个示例在电脑A运行:
程序代码:
**************************************************
*-- Form:         form1 (d:\documents\visual foxpro 项目\udptest1.scx)
*-- 父类:  form
*-- 基类:    form
*-- 时间戳:   10/19/25 10:12:05 PM
*
DEFINE CLASS form1 AS form


    Top = 0
    Left = 0
    DoCreate = .T.
    Caption = "本地端口58002"
    Name = "Form1"


    ADD OBJECT olecontrol1 AS olecontrol WITH ;
        Top = 12, ;
        Left = 324, ;
        Height = 100, ;
        Width = 100, ;
        Name = "Olecontrol1"


    ADD OBJECT label1 AS label WITH ;
        AutoSize = .T., ;
        Caption = "远程ip:", ;
        Height = 16, ;
        Left = 12, ;
        Top = 15, ;
        Width = 50, ;
        Name = "Label1"


    ADD OBJECT text1 AS textbox WITH ;
        Value = 192.168.1.7, ;
        Height = 20, ;
        Left = 72, ;
        Top = 12, ;
        Width = 100, ;
        Name = "Text1"


    ADD OBJECT label2 AS label WITH ;
        AutoSize = .T., ;
        Caption = "远程端口:", ;
        Height = 16, ;
        Left = 12, ;
        Top = 51, ;
        Width = 62, ;
        Name = "Label2"


    ADD OBJECT text2 AS textbox WITH ;
        Alignment = 3, ;
        Value = 58001, ;
        Height = 20, ;
        Left = 72, ;
        Top = 48, ;
        Width = 100, ;
        Name = "Text2"


    ADD OBJECT label3 AS label WITH ;
        AutoSize = .T., ;
        Caption = "本地ip:", ;
        Height = 16, ;
        Left = 12, ;
        Top = 88, ;
        Width = 50, ;
        Name = "Label3"


    ADD OBJECT text3 AS textbox WITH ;
        Value = 192.168.1.7, ;
        Height = 20, ;
        Left = 72, ;
        Top = 85, ;
        Width = 100, ;
        Name = "Text3"


    ADD OBJECT label4 AS label WITH ;
        AutoSize = .T., ;
        Caption = "本地端口:", ;
        Height = 16, ;
        Left = 12, ;
        Top = 124, ;
        Width = 62, ;
        Name = "Label4"


    ADD OBJECT text4 AS textbox WITH ;
        Alignment = 3, ;
        Value = 50082, ;
        Height = 20, ;
        Left = 72, ;
        Top = 121, ;
        Width = 100, ;
        Name = "Text4"


    ADD OBJECT edit1 AS editbox WITH ;
        Height = 84, ;
        Left = 12, ;
        Top = 156, ;
        Width = 228, ;
        Name = "Edit1"


    ADD OBJECT command1 AS commandbutton WITH ;
        Top = 168, ;
        Left = 288, ;
        Height = 25, ;
        Width = 73, ;
        Caption = "发  送", ;
        Name = "Command1"


    PROCEDURE olecontrol1.DataArrival
        *** ActiveX 控件事件 ***
        LPARAMETERS bytestotal
        cdata=REPLICATE(CHR(0),bytestotal)
        this.object.getData(@cdata)
        thisform.edit1.Value="收到数据:"+CHR(13)
        thisform.edit1.Value=thisform.edit1.Value+cdata
    ENDPROC


    PROCEDURE olecontrol1.Init
        this.obJECT.Bind(58002)
    ENDPROC


    PROCEDURE command1.Click
        IF !EMPTY(thisform.edit1.Value)
            thisform.olecontrol1.remoteHost=thisform.text1.value
            thisform.olecontrol1.object.SendData(thisform.edit1.Value)
            thisform.edit1.Value="" 
        ENDIF 

    ENDPROC


ENDDEFINE
*
*-- EndDefine: form1
**************************************************


另外一个例子在电脑B运行:
程序代码:
**************************************************
*-- Form:         form1 (d:\documents\visual foxpro 项目\udptest2.scx)
*-- 父类:  form
*-- 基类:    form
*-- 时间戳:   10/19/25 10:12:06 PM
*
DEFINE CLASS form1 AS form


    Top = 0
    Left = 0
    DoCreate = .T.
    Caption = "本地端口58001"
    Name = "Form1"


    ADD OBJECT olecontrol1 AS olecontrol WITH ;
        Top = 12, ;
        Left = 324, ;
        Height = 100, ;
        Width = 100, ;
        Name = "Olecontrol1"


    ADD OBJECT label1 AS label WITH ;
        AutoSize = .T., ;
        Caption = "远程ip:", ;
        Height = 16, ;
        Left = 12, ;
        Top = 15, ;
        Width = 50, ;
        Name = "Label1"


    ADD OBJECT text1 AS textbox WITH ;
        Value = 192.168.1.7, ;
        Height = 20, ;
        Left = 72, ;
        Top = 12, ;
        Width = 100, ;
        Name = "Text1"


    ADD OBJECT label2 AS label WITH ;
        AutoSize = .T., ;
        Caption = "远程端口:", ;
        Height = 16, ;
        Left = 12, ;
        Top = 51, ;
        Width = 62, ;
        Name = "Label2"


    ADD OBJECT text2 AS textbox WITH ;
        Alignment = 3, ;
        Value = 58002, ;
        Height = 20, ;
        Left = 72, ;
        Top = 48, ;
        Width = 100, ;
        Name = "Text2"


    ADD OBJECT label3 AS label WITH ;
        AutoSize = .T., ;
        Caption = "本地ip:", ;
        Height = 16, ;
        Left = 12, ;
        Top = 88, ;
        Width = 50, ;
        Name = "Label3"


    ADD OBJECT text3 AS textbox WITH ;
        Value = 192.168.1.7, ;
        Height = 20, ;
        Left = 72, ;
        Top = 85, ;
        Width = 100, ;
        Name = "Text3"


    ADD OBJECT label4 AS label WITH ;
        AutoSize = .T., ;
        Caption = "本地端口:", ;
        Height = 16, ;
        Left = 12, ;
        Top = 124, ;
        Width = 62, ;
        Name = "Label4"


    ADD OBJECT text4 AS textbox WITH ;
        Alignment = 3, ;
        Value = 58001, ;
        Height = 20, ;
        Left = 72, ;
        Top = 121, ;
        Width = 100, ;
        Name = "Text4"


    ADD OBJECT edit1 AS editbox WITH ;
        Height = 84, ;
        Left = 12, ;
        Top = 156, ;
        Width = 228, ;
        Name = "Edit1"


    ADD OBJECT command1 AS commandbutton WITH ;
        Top = 168, ;
        Left = 288, ;
        Height = 25, ;
        Width = 73, ;
        Caption = "发  送", ;
        Name = "Command1"


    PROCEDURE olecontrol1.DataArrival
        *** ActiveX 控件事件 ***
        LPARAMETERS bytestotal
        cdata=REPLICATE(CHR(0),bytestotal)
        this.object.getData(@cdata)
        thisform.edit1.Value="收到数据:"+CHR(13)
        thisform.edit1.Value=thisform.edit1.Value+cdata
    ENDPROC


    PROCEDURE olecontrol1.Init
        this.object.Bind(58001)
    ENDPROC


    PROCEDURE command1.Click

        IF !EMPTY(thisform.edit1.Value)
            thisform.olecontrol1.remoteHost=thisform.text1.value
            thisform.olecontrol1.object.SendData(thisform.edit1.Value)
            thisform.edit1.Value=""
        ENDIF 

    ENDPROC


ENDDEFINE
*
*-- EndDefine: form1
**************************************************


你参考我的dataarrival事件,init事件,发送按钮的click事件,以及初始化olecontrol的init事件,查看一下你的问题在哪里吧。

[此贴子已经被作者于2025-10-19 22:27编辑过]

昨晚 22:21
快速回复:利用winsock,协议类型upd,在A 电脑上发送消请教息,B电脑接收消息, ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030753 second(s), 12 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved