2011-04-29 6 views
1

설정 : 사용하면 서버와 클라이언트를 구분하지 않는 지점 간 Connection 클래스를 작성하고 싶습니다. connect()을 호출하는 첫 번째 호스트는 클라이언트 연결을 기다리는 서버가되고 두 ​​번째 호스트는 서버에 연결하는 클라이언트가됩니다.udp를 사용할 때 서버가 수신 대기하는지 확인

connect() 메서드를 수행하려면 먼저 수신 서버를 확인해야합니다. a) 처음으로이 문제가 발생하면 서버를 찾을 수없고 connect()을 호출하는 당사자가 들어오는 연결에 대해 localhost 및 구성된 포트에서 청취하기 시작합니다. b)connect()을 호출하는 제 2자는 또한 지정된 포트에서 원격 호스트를 확인하고 서버를 인식하여 연결합니다.

연결을 설정할 수없는 경우 TcpClient.Connect()이 예외를 throw하기 때문에 TCP를 사용하여 너무 어렵지 않습니다. 그러므로 나는 언제 내가 처음인지 안다. 신뢰할 수있는 LAN 만 사용하기 때문에 UDP를 사용하고 싶었습니다.

문제점 : UDP 서버 소켓이 들어오는 데이터를 기다리는 지 여부를 어떻게 확인할 수 있습니까?

이상적으로 비동기 네트워크 API를 직접 사용하고 싶습니다. 혼자 듣는 쓰레드를 다루는 대신.

답변

1

UDP를 사용하면 의사 소통 모델은 병 속에있는 메시지와 유사합니다. 전송 한 것을 알지만 다른 사람이 수신했는지 알 수있는 방법이 없습니다.

원격 통신 당사자가 듣고 있는지 확인하기 위해 수동으로 통신 프로토콜을 설정해야합니다 (예 : "예, 여기 있습니다"응답). 이렇게하려면 두 끝점 모두 UDP 데이터 그램을 받아 들일 필요가 있습니다.

0

청취 서버를 확인할 수 없다고 생각합니다. 패킷을 보내지 못하고 회신을받을 때까지 기다리는 것이 좋습니다.

1

존 앤드류 (Jon and Andrew)는 청취자가 열려 있는지 확인할 수는 없지만 핑/퐁 (ping/pong) 프로토콜을 구현할 수 있다고 말했습니다. 아무 핑 (pong)이 없다면 처음으로 핑 (ping)을 보내고 서버처럼 이것을 설정하십시오.
퐁 (pong)을 가지고 있다면 서버가됩니다.

관련 문제