idudpserver发送信息问题

时间:2022-12-14 14:40:18
假设局域网内有两台电脑,两个IDUDPclient在局域网内,并使用同样的端口发送信息,idUDPserver在局域网外,idUDPserver怎样向这两个客服端发送信息呀?一般使用IP:端口方式吧,但是局域网内的客服端大网IP是一样的呀,端口也设置为一样的,怎么就收信息呢?

6 个解决方案

#1


假设两台内网机器(A,B)的外网IP是222.222.222.222,服务端IP/Port是333.333.333.333:3000

A发送IdUDPClient.Send('333.333.333.333', 3000, 'A');
B发送IdUDPClient.Send('333.333.333.333', 3000, 'B');

然后在服务端的OnUDPRead中写上:
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  S: string;
begin
  if AData.Size = 0 then Exit;
  SetLength(S, AData.Size);
  AData.Read(S[1], AData.Size);
  Memo1.Lines.Add(Format('%S %S:%D', [S, ABinding.PeerIP, ABinding.PeerPort]));
end;


就知道A和B是不是你所谓的"同一个端口"了

#2


我很久没开发了!

>>并使用同样的端口发送信息,idUDPserver在局域网外,idUDPserver怎样向这两个客服端发送信息呀?一般使用IP:端口方式吧,但是局域网内的客服端大网IP是一样的呀,端口也设置为一样的,怎么就收信息呢?

实际上,所谓的端口一样,是连接 idUDPserver的端口一样,而客户端一般是一个随机的端口和server端连接的,所以不存在冲突

嗯,楼上的代码,应该可以体现该问题

#3


路过帮顶

#4


路过留痕

认真学习

#5


假定局域网Lan1当中运行有A和B两个客户端,
A(192.168.1.29:3000)
B(192.168.1.23:3000)
他们同在Lan1当中,而Lan1连接公网使用的是
G(192.168.1.1),它有一个外网IP:202.9.20.4

另外有一台服务器S(202.87.12.34:3001)

发送报文的流程就是
A( 192.168.1.29:3000) -> G(192.168.1.1-NAT转换- 202.9.20.4:2003) -> S( 202.87.12.34:3001)
B( 192.168.1.23:3000) -> G(192.168.1.1(NAT转换)- 202.9.20.4:2004) -> S( 202.87.12.34:3001)

这个时候,对于A和B都是从本机的3000端口发送到S的3001端口,而对于S看到的是G的2003和2004两个端口发来消息。

从业务来讲,如果A和B没有在报文当中声明自己是A或者B,那么S完全就有理由认为是G从两个端口发来的两个报文,而不需要理会到底是G发出来的还是G后面的A或者B或者C还是D发出来的。只须一一做出处理即可

#6


基本理解了,谢谢

#1


假设两台内网机器(A,B)的外网IP是222.222.222.222,服务端IP/Port是333.333.333.333:3000

A发送IdUDPClient.Send('333.333.333.333', 3000, 'A');
B发送IdUDPClient.Send('333.333.333.333', 3000, 'B');

然后在服务端的OnUDPRead中写上:
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  S: string;
begin
  if AData.Size = 0 then Exit;
  SetLength(S, AData.Size);
  AData.Read(S[1], AData.Size);
  Memo1.Lines.Add(Format('%S %S:%D', [S, ABinding.PeerIP, ABinding.PeerPort]));
end;


就知道A和B是不是你所谓的"同一个端口"了

#2


我很久没开发了!

>>并使用同样的端口发送信息,idUDPserver在局域网外,idUDPserver怎样向这两个客服端发送信息呀?一般使用IP:端口方式吧,但是局域网内的客服端大网IP是一样的呀,端口也设置为一样的,怎么就收信息呢?

实际上,所谓的端口一样,是连接 idUDPserver的端口一样,而客户端一般是一个随机的端口和server端连接的,所以不存在冲突

嗯,楼上的代码,应该可以体现该问题

#3


路过帮顶

#4


路过留痕

认真学习

#5


假定局域网Lan1当中运行有A和B两个客户端,
A(192.168.1.29:3000)
B(192.168.1.23:3000)
他们同在Lan1当中,而Lan1连接公网使用的是
G(192.168.1.1),它有一个外网IP:202.9.20.4

另外有一台服务器S(202.87.12.34:3001)

发送报文的流程就是
A( 192.168.1.29:3000) -> G(192.168.1.1-NAT转换- 202.9.20.4:2003) -> S( 202.87.12.34:3001)
B( 192.168.1.23:3000) -> G(192.168.1.1(NAT转换)- 202.9.20.4:2004) -> S( 202.87.12.34:3001)

这个时候,对于A和B都是从本机的3000端口发送到S的3001端口,而对于S看到的是G的2003和2004两个端口发来消息。

从业务来讲,如果A和B没有在报文当中声明自己是A或者B,那么S完全就有理由认为是G从两个端口发来的两个报文,而不需要理会到底是G发出来的还是G后面的A或者B或者C还是D发出来的。只须一一做出处理即可

#6


基本理解了,谢谢