2012-04-04 3 views
0

나는 프로그램이 다음과 같이 있습니다 :UDP C# 연결

Socket receiveSocket = new Socket(AddressFamily.InterNetwork, 
            SocketType.Dgram, ProtocolType.Udp); 

EndPoint bindEndPoint = new IPEndPoint(IPAddress.Any, 3838); 

byte[] recBuffer = new byte[256]; 

public Form1() 
{ 
    InitializeComponent(); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    receiveSocket.Bind(bindEndPoint); 
    receiveSocket.Receive(recBuffer); 
} 

을하고 노력하지만, 난 그냥 특정 IP 주소로 듣고 싶을 때, 그것이 exeption를 throw 작동하지 않는다 "요청 된 주소 컨텍스트에서 유효하지 않습니다. "

새 코드 : EndPoint bindEndPoint = new IPEndPoint (IPAddress.Parse ("192.168.40.1 "), 3838);

+0

'수신 * *'대신 '특정 IP에서'* 들으려고 '했습니까? 그것이 당신의 새 샘플이 당신이하고 싶다고 제안했기 때문입니다. – mtijn

+0

컴퓨터에 해당 IP 주소가 있습니까? 또한 :'Recieve'는 UDP가 아닌 TCP를위한 것입니다. 'ReceiveFrom' 사용 – jgauffin

답변

1

바인딩 할 IP 주소는 컴퓨터의 네트워크 인터페이스에 실제로 할당 된 IP 주소 중 하나 여야합니다.

이의 당신은 이더넷 인터페이스와 무선 인터페이스를 가지고 있다고 가정 해 봅시다

이더넷 : 192.168.1.40

무선 : 192.168.1.42

하여 소켓의 바인드 메소드를 호출 할 때, 당신은 당신이 데이터를 듣고 싶은 인터페이스 인 을 말하고 있습니다. 그것은 예를 들어 '그들 중 하나'또는 이더넷 인터페이스 일뿐입니다.

나는이게 당신이 찾고 있는게 아니라고 생각하니?

은 아마 당신은 그래서 당신이 찾고 될 수 있습니다 whate 서버

에 연결을 할 수있는 사람을 제한하려고하는 것은

var remoteEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.40"), 0) 
receiveSocket.ReceiveFrom(buffer, remoteEndpoint); 

이 데이터를 수용되는 소스를 제한합니다.

+1

IPAddress.Parse ("192.168.40.1")는 IPAddress.Parse ("192.168.1.40") 여야합니까? –

+0

좋은 캐치! 고마워요 @MysticLin – TimothyP