请教,可不可以让系统自动分配一个UDP可用的端口,就像TCP客户端自动分配端口那样.

时间:2021-08-07 19:32:18
可不可以让系统自动分配一个UDP可用的端口,就像TCP客户端自动分配那样的.
因为自己指定一个端口来进行udp通讯,很有可能已经被人家占用了.
而用重用端口又不是很爽  ^_^
不知道有没有方法可以得到一个系统自动分配的.
如果没办法,那可不可以自己找到一个可用的呢?

10 个解决方案

#1


晕那,竟然没人理会:(

#2


你怎么知道系统给你分配了哪个端口啊,这样做有意义吗?

#3


65536 个端口。 随你挑!

#4


to  zcm(我是一只猪,我有一个梦) 那按照你的说法就是:
用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;

#7


to  mme(dog) :
同意ybluo() 
用UDP通讯的时候 接收端要与一个端口绑定 ,发送端由系统自动分配一个UDP可用的端口,就像TCP客户端自动分配那样的.

#8


to 楼上的:
"发送端由系统自动分配一个UDP可用的端口"
不是这样的,因为我见过很多例子,都是要自己指定一个端口和对方IP,才可以通讯的
偶终于发现答案了,哈哈哈哈哈,送分........

#9


to  mme(dog):
好像还是你说错了,发送端一共要涉及到的有两个端口,一个是发送端自己的端口,是有系统自动分配的,你说的那个端口是接收端的端口和ip,当然要自己指定了,所以发送端由系统自动分配一个UDP可用的端口"是正确的.

#10


呵呵,先谢谢"子寒"兄的关心,
你说得不错,的确是有两个端口.
就客户端来说:
一个是客户端自己的端口,它还要接收服务器发回来的信息嘛!
另一个是对方的端口.

你所说的系统自动分配的端口就是自己的端口吧!
可是,当你bind了一个端口之后,比如说bind(3000),
你就用3000端口和服务器通讯了.这时,并没有系统分配端口给你.不信,试试看就知道了.
还有,我不用控件的:)  ,因为我自己封装了socket类.

#1


晕那,竟然没人理会:(

#2


你怎么知道系统给你分配了哪个端口啊,这样做有意义吗?

#3


65536 个端口。 随你挑!

#4


to  zcm(我是一只猪,我有一个梦) 那按照你的说法就是:
用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;

#7


to  mme(dog) :
同意ybluo() 
用UDP通讯的时候 接收端要与一个端口绑定 ,发送端由系统自动分配一个UDP可用的端口,就像TCP客户端自动分配那样的.

#8


to 楼上的:
"发送端由系统自动分配一个UDP可用的端口"
不是这样的,因为我见过很多例子,都是要自己指定一个端口和对方IP,才可以通讯的
偶终于发现答案了,哈哈哈哈哈,送分........

#9


to  mme(dog):
好像还是你说错了,发送端一共要涉及到的有两个端口,一个是发送端自己的端口,是有系统自动分配的,你说的那个端口是接收端的端口和ip,当然要自己指定了,所以发送端由系统自动分配一个UDP可用的端口"是正确的.

#10


呵呵,先谢谢"子寒"兄的关心,
你说得不错,的确是有两个端口.
就客户端来说:
一个是客户端自己的端口,它还要接收服务器发回来的信息嘛!
另一个是对方的端口.

你所说的系统自动分配的端口就是自己的端口吧!
可是,当你bind了一个端口之后,比如说bind(3000),
你就用3000端口和服务器通讯了.这时,并没有系统分配端口给你.不信,试试看就知道了.
还有,我不用控件的:)  ,因为我自己封装了socket类.