UDP로 통신하는 방법을 처리하기 위해 작성하려고하는 간단한 C#/.NET 3.5 클라이언트/서버 응용 프로그램이 있습니다. 동기화 메서드를 작동시키고 앞뒤로 데이터를 보낼 수 있지만 이제 비동기 메서드로 전환하려고하는데 "요청 된 주소가 컨텍스트에 유효하지 않습니다."라는 오류가 계속 발생합니다. 이미 비동기 통신으로 전환 한 것처럼동기화에서 비동기로 전환 할 때 UDP 통신 문제가 발생합니다.
IPEndPoint ipep = new IPEndPoint(ipaddr, ipport);
newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
EndPoint remote1 = (EndPoint)ipep;
AddMessage("Looking for connections");
byte[] strt = Encoding.ASCII.GetBytes("open");
newsock.SendTo(strt,remote1);//.BeginSendTo(strt, 0, strt.Length, SocketFlags.None, remote1, new AsyncCallback(OnSend), null);
IPEndPoint ipeSender = new IPEndPoint(IPAddress.Any, 0);
EndPoint epSender = (EndPoint)ipeSender;
newsock.ReceiveFrom(rcv, ref epSender);
내 서버는 더 복잡 다음과 같이
내 클라이언트 코드입니다. 작업자 스레드에서
내가 전화 : 나는 오류가 어디에 내 OnSend 콜백 함수에서try
{
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint remote = (EndPoint)sender;
AddMessage("Beginning Wait for connections");
newsock.BeginReceiveFrom(rcv, 0, rcv.Length, SocketFlags.None, ref remote, new AsyncCallback(OnReceive), null);
while (true)
{
if (pleasestop.WaitOne(20))
break;
ts = DateTime.Now - lastnoop;
if (senddata)
{
//...fill sending byte array...
IPEndPoint ipep = new IPEndPoint(IPAddress.Any,0);//ipaddr, ipport);
EndPoint remote1 = (EndPoint)ipep;
newsock.BeginSendTo(sending, 0, sending.Length, SocketFlags.None, remote1, new AsyncCallback(OnSend), null);
}
}
는 "이 문맥의에서 요청한 주소가 유효하지 않습니다." 내가 객체 상태가 null이 될 수 있다고 생각하지 말아
private void OnSend(IAsyncResult ar)
{
try
{
newsock.EndSendTo(ar);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + "\n" + ex.StackTrace, "Server Send Error");
}
}
새로운 EndPoint를 정의하는 대신 BeginSendTo remote (BeginReceiveFrom에서 위에 사용됨)에 전달하여 오류를 해결할 수있었습니다. 그러나 클라이언트가 내 서버의 send 문에서 데이터를받지 못하고 있습니다. 서버가 실제로 클라이언트에 데이터를 보내고 있는지 어떻게 알 수 있습니까? 클라이언트와 서버를 같은 컴퓨터에서 실행할 수 있습니까? – PhilGyro