会社がさまざまなサーバーを監視するためにasp.netでWebサイトを作成していましたが、今は立ち往生しています。
ある関数では、UDP パケットを送信することはできますが、サーバーからの応答を取得できないため、サーバーの 1 つの UDP 応答時間が必要です。リクエストはサーバーによって正しく受信されます。これどうやってするの?
コードは次のとおりです。
byte[] byteData;
IPEndPoint ipeSender;
EndPoint epSender;
Socket serverSocket;
IPEndPoint ipe;
EndPoint eps;
protected void Page_Load(object sender, EventArgs e)
{
byteData = new byte[1024];
ipeSender = new IPEndPoint(IPAddress.Parse("192.168.4.25"), 2015);
epSender = (EndPoint)ipeSender;
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
serverSocket.Bind(epSender);
byte[] byteData1 = Encoding.ASCII.GetBytes("3^12062012152936041^OARAREGIONXWEB^SDHS^1^0^40^3^0^8^Register^");
serverSocket.SendTo(byteData1, eps);
ipe = new IPEndPoint(IPAddress.Parse("70.88.142.138"), 2015);
eps = (EndPoint)ipe;
serverSocket.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None, ref epSender, new AsyncCallback(OnNetworkBytesReceived), epSender);
}
private void OnNetworkBytesReceived(IAsyncResult ar)
{
try
{
IPEndPoint ipeSender = new IPEndPoint(IPAddress.Any, 0);
EndPoint epSender = (EndPoint)ipeSender;
if (serverSocket == null)
return;
//if(epSender.ToString()!= dw[1, RowIndex].Value.ToString())
// return; // serverSocket.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None, ref epSender, new AsyncCallback(OnNetworkBytesReceived), epSender);
int DataLength = serverSocket.EndReceiveFrom(ar, ref epSender);
byte[] TempBytes = new byte[DataLength];
System.Buffer.BlockCopy(byteData, 0, TempBytes, 0, DataLength);
serverSocket.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None, ref epSender, new AsyncCallback(OnNetworkBytesReceived), epSender);
}
catch (SocketException socexp)
{
}
catch (ObjectDisposedException objexp)
{
}
catch (Exception exp)
{
}
}