因为自己指定一个端口来进行udp通讯,很有可能已经被人家占用了.
而用重用端口又不是很爽 ^_^
不知道有没有方法可以得到一个系统自动分配的.
如果没办法,那可不可以自己找到一个可用的呢?
10 个解决方案
#1
晕那,竟然没人理会:(
#2
你怎么知道系统给你分配了哪个端口啊,这样做有意义吗?
#3
65536 个端口。 随你挑!
#4
to zcm(我是一只猪,我有一个梦) 那按照你的说法就是:
用UDP通讯的时候,端口只有自己指定啰?
那这样能保证不会有冲突吗?
用UDP通讯的时候,端口只有自己指定啰?
那这样能保证不会有冲突吗?
#5
用UDP通讯的时候 接收端要与一个端口绑定 ,发送端由系统自动分配一个UDP可用的端口,就像TCP客户端自动分配那样的.
个人理解
个人理解
#6
你把那个控键的active设置为true的时候,如果系统没有分配过这个端口,你就可以正常使用,如果系统已经分配了这个端口,那么就会抛出一个异常,你可以接到这个异常,然后继续处理,比如说把端口加一,然后继续申请,代码如下,delphi的,你自己更改一下.
function TForm1.CreatePort(): boolean;
begin
try
IDUdpSErver1.DefaultPort := LocalPort;
IdUdpServer1.Active := True;
IdUdpServer1.OnUDPRead := IdUDPServer1UDPRead;
except
LocalPort := LocalPort + 1;
IdUdpServer1.Active := False;
IdUdpServer1.Free;
IdUdpServer1 := TIdudpServer.Create(Application);
CreatePort;
end;
Result := True;
end;
function TForm1.CreatePort(): boolean;
begin
try
IDUdpSErver1.DefaultPort := LocalPort;
IdUdpServer1.Active := True;
IdUdpServer1.OnUDPRead := IdUDPServer1UDPRead;
except
LocalPort := LocalPort + 1;
IdUdpServer1.Active := False;
IdUdpServer1.Free;
IdUdpServer1 := TIdudpServer.Create(Application);
CreatePort;
end;
Result := True;
end;
#7
to mme(dog) :
同意ybluo()
用UDP通讯的时候 接收端要与一个端口绑定 ,发送端由系统自动分配一个UDP可用的端口,就像TCP客户端自动分配那样的.
同意ybluo()
用UDP通讯的时候 接收端要与一个端口绑定 ,发送端由系统自动分配一个UDP可用的端口,就像TCP客户端自动分配那样的.
#8
to 楼上的:
"发送端由系统自动分配一个UDP可用的端口"
不是这样的,因为我见过很多例子,都是要自己指定一个端口和对方IP,才可以通讯的
偶终于发现答案了,哈哈哈哈哈,送分........
"发送端由系统自动分配一个UDP可用的端口"
不是这样的,因为我见过很多例子,都是要自己指定一个端口和对方IP,才可以通讯的
偶终于发现答案了,哈哈哈哈哈,送分........
#9
to mme(dog):
好像还是你说错了,发送端一共要涉及到的有两个端口,一个是发送端自己的端口,是有系统自动分配的,你说的那个端口是接收端的端口和ip,当然要自己指定了,所以发送端由系统自动分配一个UDP可用的端口"是正确的.
好像还是你说错了,发送端一共要涉及到的有两个端口,一个是发送端自己的端口,是有系统自动分配的,你说的那个端口是接收端的端口和ip,当然要自己指定了,所以发送端由系统自动分配一个UDP可用的端口"是正确的.
#10
呵呵,先谢谢"子寒"兄的关心,
你说得不错,的确是有两个端口.
就客户端来说:
一个是客户端自己的端口,它还要接收服务器发回来的信息嘛!
另一个是对方的端口.
你所说的系统自动分配的端口就是自己的端口吧!
可是,当你bind了一个端口之后,比如说bind(3000),
你就用3000端口和服务器通讯了.这时,并没有系统分配端口给你.不信,试试看就知道了.
还有,我不用控件的:) ,因为我自己封装了socket类.
你说得不错,的确是有两个端口.
就客户端来说:
一个是客户端自己的端口,它还要接收服务器发回来的信息嘛!
另一个是对方的端口.
你所说的系统自动分配的端口就是自己的端口吧!
可是,当你bind了一个端口之后,比如说bind(3000),
你就用3000端口和服务器通讯了.这时,并没有系统分配端口给你.不信,试试看就知道了.
还有,我不用控件的:) ,因为我自己封装了socket类.
#1
晕那,竟然没人理会:(
#2
你怎么知道系统给你分配了哪个端口啊,这样做有意义吗?
#3
65536 个端口。 随你挑!
#4
to zcm(我是一只猪,我有一个梦) 那按照你的说法就是:
用UDP通讯的时候,端口只有自己指定啰?
那这样能保证不会有冲突吗?
用UDP通讯的时候,端口只有自己指定啰?
那这样能保证不会有冲突吗?
#5
用UDP通讯的时候 接收端要与一个端口绑定 ,发送端由系统自动分配一个UDP可用的端口,就像TCP客户端自动分配那样的.
个人理解
个人理解
#6
你把那个控键的active设置为true的时候,如果系统没有分配过这个端口,你就可以正常使用,如果系统已经分配了这个端口,那么就会抛出一个异常,你可以接到这个异常,然后继续处理,比如说把端口加一,然后继续申请,代码如下,delphi的,你自己更改一下.
function TForm1.CreatePort(): boolean;
begin
try
IDUdpSErver1.DefaultPort := LocalPort;
IdUdpServer1.Active := True;
IdUdpServer1.OnUDPRead := IdUDPServer1UDPRead;
except
LocalPort := LocalPort + 1;
IdUdpServer1.Active := False;
IdUdpServer1.Free;
IdUdpServer1 := TIdudpServer.Create(Application);
CreatePort;
end;
Result := True;
end;
function TForm1.CreatePort(): boolean;
begin
try
IDUdpSErver1.DefaultPort := LocalPort;
IdUdpServer1.Active := True;
IdUdpServer1.OnUDPRead := IdUDPServer1UDPRead;
except
LocalPort := LocalPort + 1;
IdUdpServer1.Active := False;
IdUdpServer1.Free;
IdUdpServer1 := TIdudpServer.Create(Application);
CreatePort;
end;
Result := True;
end;
#7
to mme(dog) :
同意ybluo()
用UDP通讯的时候 接收端要与一个端口绑定 ,发送端由系统自动分配一个UDP可用的端口,就像TCP客户端自动分配那样的.
同意ybluo()
用UDP通讯的时候 接收端要与一个端口绑定 ,发送端由系统自动分配一个UDP可用的端口,就像TCP客户端自动分配那样的.
#8
to 楼上的:
"发送端由系统自动分配一个UDP可用的端口"
不是这样的,因为我见过很多例子,都是要自己指定一个端口和对方IP,才可以通讯的
偶终于发现答案了,哈哈哈哈哈,送分........
"发送端由系统自动分配一个UDP可用的端口"
不是这样的,因为我见过很多例子,都是要自己指定一个端口和对方IP,才可以通讯的
偶终于发现答案了,哈哈哈哈哈,送分........
#9
to mme(dog):
好像还是你说错了,发送端一共要涉及到的有两个端口,一个是发送端自己的端口,是有系统自动分配的,你说的那个端口是接收端的端口和ip,当然要自己指定了,所以发送端由系统自动分配一个UDP可用的端口"是正确的.
好像还是你说错了,发送端一共要涉及到的有两个端口,一个是发送端自己的端口,是有系统自动分配的,你说的那个端口是接收端的端口和ip,当然要自己指定了,所以发送端由系统自动分配一个UDP可用的端口"是正确的.
#10
呵呵,先谢谢"子寒"兄的关心,
你说得不错,的确是有两个端口.
就客户端来说:
一个是客户端自己的端口,它还要接收服务器发回来的信息嘛!
另一个是对方的端口.
你所说的系统自动分配的端口就是自己的端口吧!
可是,当你bind了一个端口之后,比如说bind(3000),
你就用3000端口和服务器通讯了.这时,并没有系统分配端口给你.不信,试试看就知道了.
还有,我不用控件的:) ,因为我自己封装了socket类.
你说得不错,的确是有两个端口.
就客户端来说:
一个是客户端自己的端口,它还要接收服务器发回来的信息嘛!
另一个是对方的端口.
你所说的系统自动分配的端口就是自己的端口吧!
可是,当你bind了一个端口之后,比如说bind(3000),
你就用3000端口和服务器通讯了.这时,并没有系统分配端口给你.不信,试试看就知道了.
还有,我不用控件的:) ,因为我自己封装了socket类.