Foxtable(狐表)用户栏目专家坐堂 → UDPClient端口问题


  共有3261人关注过本帖树形打印复制链接

主题:UDPClient端口问题

帅哥哟,离线,有人找我吗?
andy-1024
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:182 积分:1592 威望:0 精华:0 注册:2016/11/10 10:14:00
UDPClient端口问题  发帖心情 Post By:2020/7/28 5:38:00 [显示全部帖子]

老师好,我现在想实现下面功能,但是关于端口方面不是很明白。
我现在有两个店面,每个店面都有一台服务器和好几台终端,还有一台远程服务器在阿里云上。
店面做的一些单据需要审核,我现在的软件是把审核过程放在本地机器上进行,缺点是耗时比较长。
所以我现在想全部改为在远程服务器上审核,速度会快很多。这样的话就要用到UDPClient。
店面里任一台机器审核单据的时候发送一个消息到远程服务器,然后远程服务器开始审核,审核完发送回本地操作机器一个反馈消息。
这种情况下本地机器的UDPClient的IP可不可以设置成0.0.0.0?Port应该怎么设置?取多少为好?
远程ReceivedMessage事件中对方的IP和Port又怎么能知道?
从来没有用过这个功能,看教程也是没怎么看懂,请老师指点一下。
谢谢。


 回到顶部
帅哥哟,离线,有人找我吗?
andy-1024
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:182 积分:1592 威望:0 精华:0 注册:2016/11/10 10:14:00
  发帖心情 Post By:2020/7/28 14:39:00 [显示全部帖子]

哦,好的,我先试试
[此贴子已经被作者于2020/7/28 14:40:30编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
andy-1024
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:182 积分:1592 威望:0 精华:0 注册:2016/11/10 10:14:00
  发帖心情 Post By:2020/7/31 4:49:00 [显示全部帖子]

老师好,我尝试了好多次,还是不会,总是报错。
关于UDPClient,我感觉帮助文档里的介绍太粗略,也太少了,而且没有几个例子,实在是琢磨不明白代码应该怎么写。

我的代码如下:完全是瞎蒙的,请老师帮我指导一下,应该怎么写才能实现发送消息到远程服务器的功能。

Dim IP As String = Vars("RemoteIP")    '定义远程服务器的IP地址变量
If UDPClients.Count = 0 Then
    UDPClients.Add("UDP1")
    UDPClients("UDP1").IP = IP
    UDPClients("UDP1").Port = 52178
    UDPClients("UDP1").Start()
    UDPClients("UDP1").Send(IP, 52178, User.Name & "|" & TBN.Value)
Else
    UDPClients(0).Send(IP, 52178, User.Name & "|" & TBN.Value)
End If

如果是系统刚启动,尚未启动UDPClient的情况下,执行上面代码,在执行语句:
    UDPClients("UDP1").Start()
的时候,报错如下:“在其上下文中,该请求的地址无效。”
然后就没有然后了。
如果再执行一次(此时UDPClient已启动),则报错如下:“给定关键字不在字典中。”

如果把
    UDPClients("UDP1").IP = IP   改为   
    UDPClients("UDP1").IP = “0.0.0.0”
则刚启动系统,执行上述代码的时候不会报错,但是远程服务器并没有接收到消息。
第二次执行上述代码的时候一样报错:“给定关键字不在字典中。”

如果把
    UDPClients("UDP1").IP = IP   改为   
    UDPClients("UDP1").IP = “127.0.0.1”
则刚启动系统,执行上述代码的时候报错如下:“向一个无法连接的网络尝试了一个套接字操作。”
第二次执行上述代码的时候一样报错:“给定关键字不在字典中。”

实在是搞不明白,请老师指教,谢谢!



 回到顶部
帅哥哟,离线,有人找我吗?
andy-1024
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:182 积分:1592 威望:0 精华:0 注册:2016/11/10 10:14:00
  发帖心情 Post By:2020/8/1 5:11:00 [显示全部帖子]

老师好,我按照上面的讲解,将我的代码更改如下:

对于本地电脑中的程序:

    1. 在AfterOpenProject事件中,加入开启UDPClient的代码:

    If UDPClients.Count = 0 Then
        UDPClients.Add("UDP1")
        UDPClients("UDP1").IP = "0.0.0.0"
        UDPClients("UDP1").Port = 52178
        UDPClients("UDP1").Start()
    End If

    2.在需要发送消息的功能中加入下面的代码:

    Dim IP As String = Vars("RemoteIP")    '把远程服务器的IP地址赋给变量“IP”
    UDPClients("UDP1").Send(IP, 52179, User.Name & "|" & TBN.Value)

对于远程服务器电脑中的程序:

    1. 在AfterOpenProject事件中,加入开启UDPClient的代码:

    If UDPClients.Count = 0 Then
        UDPClients.Add("UDP1")
        UDPClients("UDP1").IP = "127.0.0.1"
        UDPClients("UDP1").Port = 52179
        UDPClients("UDP1").Start()
    End If

    2. 在UDPClient的ReceivedMessage事件中加入代码,查看是否接收到消息:

    Dim msg As String = e.Message
    MessageBox.Show(msg)     '查看是否接收到消息
    MessageBox.Show(e.UDPclient.IP & "|" & e.UDPclient.Port)    '如果接收到消息,尝试看看能否看到发送消息方的IP和Port

然后,我在本地机器上退出程序,再重新打开,发送消息,没有发现任何错误提示,执行完毕。
然而,远程服务器上没有弹出任何消息对话框,我尝试把IP改为“0.0.0.0”也是一样的。
不知道现在的问题出在哪里,请老师再多多指教!
谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
andy-1024
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:182 积分:1592 威望:0 精华:0 注册:2016/11/10 10:14:00
  发帖心情 Post By:2020/8/5 6:18:00 [显示全部帖子]

老师好,按照上面的云服务器UDP端口设置说明设置后,现在服务器已经可以正常接收本地机器发送的消息了。
下面一个问题是关于IPEndpoint,帮助文档上关于UDPClient的讲解中,只有一段是关于其它vb.net开发程序中的代码示例。
关于在Foxtable中IPEndpoint的用法,我实在是不会,麻烦老师帮我讲解一下,最好能给个示例,这样更好理解。
另外,如果要从云服务器回传消息给本地发送消息的电脑,远程服务器除了开放UDP-52179,和UDP 25000-30000端口外,还需不需要开放其它端口了?
本地机器是否还需要开放什么端口或者端口范围?

 回到顶部
帅哥哟,离线,有人找我吗?
andy-1024
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:182 积分:1592 威望:0 精华:0 注册:2016/11/10 10:14:00
  发帖心情 Post By:2020/8/6 5:17:00 [显示全部帖子]

好的,谢谢老师!消息发送和返回都已经成功了。
审核过程由原来的半分钟甚至将近两分钟,缩短至3秒钟完成,简直是一次质的飞跃!!
非常感谢老师的耐心指导!
[此贴子已经被作者于2020/8/6 5:19:32编辑过]

 回到顶部