记录当前远程和本地地址信息,方便外部使用

This commit is contained in:
nnhy 2015-06-27 13:04:09 +00:00
parent 002b564047
commit c9a4f35dc4
2 changed files with 18 additions and 18 deletions

View File

@ -46,15 +46,15 @@ bool UdpSocket::Process(IP_HEADER& ip, Stream& ms)
if(!udp) return false; if(!udp) return false;
ushort port = __REV16(udp->DestPort); ushort port = __REV16(udp->DestPort);
//ushort remotePort = __REV16(udp->SrcPort); ushort remotePort = __REV16(udp->SrcPort);
// 仅处理本连接的IP和端口 // 仅处理本连接的IP和端口
if(Port != 0 && port != Port) return false; if(Port != 0 && port != Port) return false;
//Remote.Port = remotePort; CurRemote.Port = remotePort;
//Remote.Address = ip.SrcIP; CurRemote.Address = ip.SrcIP;
//Local.Port = port; CurLocal.Port = port;
//Local.Address = ip.DestIP; CurLocal.Address = ip.DestIP;
#if NET_DEBUG #if NET_DEBUG
byte* data = udp->Next(); byte* data = udp->Next();
@ -79,27 +79,27 @@ void UdpSocket::OnProcess(IP_HEADER& ip, UDP_HEADER& udp, Stream& ms)
// 触发ITransport接口事件 // 触发ITransport接口事件
uint len2 = OnReceive(data, len); uint len2 = OnReceive(data, len);
// 如果有返回,说明有数据要回复出去 // 如果有返回,说明有数据要回复出去
if(len2) Write(data, len2); //if(len2) Write(data, len2);
if(len2)
{
ByteArray bs(data, len2);
Send(bs, CurRemote.Address, CurRemote.Port);
}
IPAddress addr = ip.SrcIP;
IPEndPoint remote(addr, __REV16(udp.SrcPort));
if(OnReceived) if(OnReceived)
{ {
// 返回值指示是否向对方发送数据包 // 返回值指示是否向对方发送数据包
bool rs = OnReceived(*this, udp, remote, ms); bool rs = OnReceived(*this, udp, CurRemote, ms);
if(rs && ms.Remain() > 0) Send(udp, len, remote.Address, remote.Port, false); if(rs && ms.Remain() > 0) Send(udp, len, CurRemote.Address, CurRemote.Port, false);
} }
else else
{ {
#if NET_DEBUG #if NET_DEBUG
addr = ip.DestIP;
IPEndPoint local(addr, __REV16(udp.DestPort));
debug_printf("UDP "); debug_printf("UDP ");
remote.Show(); CurRemote.Show();
debug_printf(" => "); debug_printf(" => ");
local.Show(); CurLocal.Show();
debug_printf(" Payload=%d udp_len=%d \r\n", len, __REV16(udp.Length)); debug_printf(" Payload=%d udp_len=%d \r\n", len, __REV16(udp.Length));
Sys.ShowHex(data, len); Sys.ShowHex(data, len);

View File

@ -7,13 +7,13 @@
class UdpSocket : public Socket, public ITransport class UdpSocket : public Socket, public ITransport
{ {
private: private:
//UDP_HEADER* Create();
public: public:
ushort Port; // 本地端口接收该端口数据包。0表示接收所有端口的数据包 ushort Port; // 本地端口接收该端口数据包。0表示接收所有端口的数据包
ushort BindPort; // 绑定端口用于发出数据包的源端口。默认为Port若Port为0则从1024算起累加 ushort BindPort; // 绑定端口用于发出数据包的源端口。默认为Port若Port为0则从1024算起累加
IPEndPoint Remote; // 远程地址 IPEndPoint Remote; // 远程地址。默认发送数据的目标地址
//IPEndPoint Local; // 本地地址 IPEndPoint CurRemote; // 远程地址。本次收到数据的远程地址
IPEndPoint CurLocal; // 本地地址
UdpSocket(TinyIP* tip); UdpSocket(TinyIP* tip);