我很长时间都在努力解决问题。我使用统一,我想ping我的服务器和路由器。我在开始时使用UnityPing类,它适用于大多数设备,但是当我在Google Pixel(Android 7.1)上测试时,它总是返回-1。所以我尝试使用System.Net.NetworkInformation来ping我的服务器。这是我的代码:
private void PingToServer()
{
AutoResetEvent waiter = new AutoResetEvent(false);
System.Net.NetworkInformation.Ping pingSender = new System.Net.NetworkInformation.Ping();
pingSender.PingCompleted += new PingCompletedEventHandler(PingCompletedCallback);
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 10000;
PingOptions options = new PingOptions(64, true);
IPAddress address = IPAddress.Parse("119.81.194.57");
pingSender.SendAsync(address, timeout, buffer, options, waiter);
}
private void PingCompletedCallback(object sender, PingCompletedEventArgs e)
{
if (e.Cancelled)
{
Console.WriteLine("Ping canceled.");
((AutoResetEvent)e.UserState).Set();
}
if (e.Error != null)
{
Console.WriteLine("Ping failed:");
Console.WriteLine(e.Error.ToString());
((AutoResetEvent)e.UserState).Set();
}
PingReply reply = e.Reply;
int pingTime = (int)reply.RoundtripTime;
UnityEngine.Debug.Log(reply.RoundtripTime);
((AutoResetEvent)e.UserState).Set();
}
并且它总是返回一个RoundripTime,这似乎是一个有意义的数字,但当我尝试ping另一个无法访问甚至关闭互联网的IP地址时,它总是返回一个RoundripTime,其中reply.status等于IPStatus 。成功。现在我很困惑,我是否真的ping了我的远程服务器?
我确实解决了其他一些类似的问题,但它并没有解决问题。一些答案建议使用SendPingAsync而不是SendAsync,但这对于统一来说是不可能的。
答案 0 :(得分:0)
我有button.click事件,我有这个代码......它工作正常
AutoResetEvent waiter = new AutoResetEvent(false);
Ping pingSender = new Ping();
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 100;
PingOptions options = new PingOptions(64, true);
IPAddress address = IPAddress.Parse("YourTestIP");
PingReply reply = pingSender.Send(address, timeout, buffer, options);
if (reply.Status == IPStatus.Success)
{
MessageBox.Show(reply.Address.ToString());
}