什么软件使用端口UDP
两台电脑,连接在同一个路由器上。
设发送端电脑为A,接收端为B。server运行在A上,两个客户端client1(使用9012端口)和client2(使用9011端口)运行在B上。
A使用9001端口给B电脑的9012和9011端口发送两条相同的数据包(数据长度为11字节,使用sendto发送,先发送到9012端口,再发送到9011端口)
确认网络状况良好,电脑状况良好,代码无问题:
C/C++ code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
intlen_head=sizeof(modbus->stx)+sizeof(modbus->address)+sizeof(modbus->command)+sizeof(modbus->len);
intlen_data=modbus->getDataLength();
intlen_tail=sizeof(modbus->fcs);
intlength=len_head+len_data+len_tail;
if(length>MAX_UDP_PACKET_SIZE)
returnX_UDP_TOOMUCH_DATA;
CHAR*pBuf=(CHAR*)_alloca(length);
memcpy(pBuf,modbus,len_head);
if(len_data>0)
memcpy(pBuf+len_head,modbus->data,len_data);
memcpy(pBuf+len_head+len_data,modbus->fcs,len_tail);
inttotal=0;
while(total<length)
{
intsended=sendto(g_socket,pBuf+total,length-total,0,(sockaddr*)addr,sizeof(sockaddr));
if(sended<=0)
break;
total+=sended;
}
returntotal==length?X_UDP_OK:X_UDP_WRITE_FAILED;
现在碰到的问题是:
server程序刚启动时,server发送到client1和client2的指令均可以被成功接收;如果一直发送(每次都是先给client1发送,接着马上给client2发送)没有问题;
但是如果server软件间隔几十分钟不操作后,server再次发送指令到client1和client2,会发现client1无法接收到任何数据,而client2正常接收。再次操作,发送client1和client2都可以正常接收。
用SNIFFER运行在B电脑上监控网络数据,发现只有一个发到9011端口的UDP包,而发往9012端口的包无影无踪。在发到9011端口的数据包前有一个WINSNameService包(这个应该没有影响)。
用IRIS软件监控A电脑上的数据,亦只有发现一个发往B电脑9011端口的UDP包,发往9012端口的包在server段亦未监控到。
在代码内有OutputDebugString辅助调试,可以确认有调用sendto给B电脑的9012端口发数据。
对于采用Windows
2000或者Windows
XP的用户来说,不需要安装任何其他软件,可以利用“TCP/IP筛选”功能限制服务器的端口。具体设置如下:
1、右键点击“网上邻居”,选择“属性”,然后双击“本地连接”(如果是拨号上网用户,选择“我的连接”图标),弹出“本地连接状态”对话框。
2、点击[属性]按钮,弹出“本地连接属性”,选择“此连接使用下列项目”中的“Internet协议(TCP/IP)”,然后点击[属性]按钮。
3、在弹出的“Internet协议(TCP/IP)”对话框中点击[高级]按钮。在弹出的“高级TCP/IP设置”中,选择“选项”标签,选中“TCP/IP筛选”,然后点击[属性]按钮。
4、在弹出的“TCP/IP筛选”对话框里选择“启用TCP/IP筛选”的复选框,然后把左边“TCP端口”上的“只允许”选上(请见附图)。
这样,您就可以来自己添加或删除您的TCP或UDP或IP的各种端口了。
添加或者删除完毕,重新启动机器以后,您的服务器就被保护起来了。
如果只上网浏览的话,可以不添加任何端口。但是要利用一些网络联络工具,比如OICQ的话,就要把“4000”这个端口打开,同理,如果发现某个常用的网络工具不能起作用的时候,请搞清它在您主机所开的端口,然后在“TCP/IP筛选”中添加端口即可。
本文由用户上传,如有侵权请联系删除!转转请注明出处:https://nongye.s666.cn/bk/6_6572053372.html