Skip to content

Commit 4dc0fdb

Browse files
committed
[增加]1. 增加网络对域名和IP的兼容
1 parent 2d7a91a commit 4dc0fdb

File tree

2 files changed

+62
-17
lines changed

2 files changed

+62
-17
lines changed

Runtime/Network/Network/NetworkManager.NetworkChannelBase.cs

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -556,28 +556,54 @@ public virtual void Connect(Uri address, object userData = null)
556556
PSocket = null;
557557
}
558558

559-
EndPoint endPoint = new IPEndPoint(IPAddress.Parse(address.Host), address.Port);
560-
switch (endPoint.AddressFamily)
559+
bool isVerify = true;
560+
IPEndPoint endPoint = null;
561+
if (IPAddress.TryParse(address.Host, out var ipAddress))
561562
{
562-
case System.Net.Sockets.AddressFamily.InterNetwork:
563-
PAddressFamily = AddressFamily.IPv4;
564-
break;
563+
endPoint = new IPEndPoint(ipAddress, address.Port);
564+
}
565+
else
566+
{
567+
var ipHost = Utility.Net.GetHostIPv4(address.Host);
568+
if (IPAddress.TryParse(ipHost, out ipAddress))
569+
{
570+
endPoint = new IPEndPoint(ipAddress, address.Port);
571+
}
572+
else
573+
{
574+
// 获取IP失败
575+
Log.Error($"IP address is invalid.{address.Host}");
576+
isVerify = false;
577+
Close();
578+
PSocket = null;
579+
}
580+
}
565581

566-
case System.Net.Sockets.AddressFamily.InterNetworkV6:
567-
PAddressFamily = AddressFamily.IPv6;
568-
break;
582+
if (isVerify)
583+
{
584+
switch (endPoint.AddressFamily)
585+
{
586+
case System.Net.Sockets.AddressFamily.InterNetwork:
587+
PAddressFamily = AddressFamily.IPv4;
588+
break;
569589

570-
default:
571-
string errorMessage = Utility.Text.Format("Not supported address family '{0}'.", endPoint.AddressFamily);
572-
if (NetworkChannelError != null)
573-
{
574-
NetworkChannelError(this, NetworkErrorCode.AddressFamilyError, SocketError.Success, errorMessage);
575-
return;
576-
}
590+
case System.Net.Sockets.AddressFamily.InterNetworkV6:
591+
PAddressFamily = AddressFamily.IPv6;
592+
break;
593+
594+
default:
595+
string errorMessage = Utility.Text.Format("Not supported address family '{0}'.", endPoint.AddressFamily);
596+
if (NetworkChannelError != null)
597+
{
598+
NetworkChannelError(this, NetworkErrorCode.AddressFamilyError, SocketError.Success, errorMessage);
599+
return;
600+
}
577601

578-
throw new GameFrameworkException(errorMessage);
602+
throw new GameFrameworkException(errorMessage);
603+
}
579604
}
580605

606+
581607
PSendState.Reset();
582608
PReceiveState.PrepareForPacketHeader();
583609
}

Runtime/Network/Network/SystemSocket/NetworkManager.SystemTcpNetworkChannel.cs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,26 @@ public override void Connect(Uri address, object userData = null)
4646
return;
4747
}
4848

49-
m_ConnectedEndPoint = new IPEndPoint(IPAddress.Parse(address.Host), address.Port);
49+
if (IPAddress.TryParse(address.Host, out var ipAddress))
50+
{
51+
m_ConnectedEndPoint = new IPEndPoint(ipAddress, address.Port);
52+
}
53+
else
54+
{
55+
var ipHost = Utility.Net.GetHostIPv4(address.Host);
56+
if (IPAddress.TryParse(ipHost, out ipAddress))
57+
{
58+
m_ConnectedEndPoint = new IPEndPoint(ipAddress, address.Port);
59+
}
60+
else
61+
{
62+
// 获取IP失败
63+
Log.Error($"IP address is invalid.{address.Host}");
64+
Close();
65+
return;
66+
}
67+
}
68+
5069
base.Connect(address, userData);
5170
PSystemNetSocket = new SystemNetSocket(m_ConnectedEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
5271
PSocket = PSystemNetSocket;

0 commit comments

Comments
 (0)