나는 system.Net.Socket을 사용하여 서버에서 클라이언트로 메시지를 보내고받습니다. 그러나 여러 개의 서버 브로드 캐스팅 메시지가 수신자 프로그램이 갑자기 닫히는 경우 문제가 발생합니다. 두 개 이상의 서버 브로드 캐스트가있을 때 클라이언트가 둘 이상의 브로드 캐스트 메시지를 수신 할 수 있습니까?
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class Broadcst
{
public static void Main()
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep1 = new IPEndPoint(IPAddress.Broadcast, 9050);
IPEndPoint iep2 = new IPEndPoint(IPAddress.Parse("192.168.1.255"), 9050);
string hostname = Dns.GetHostName();
byte[] data = Encoding.ASCII.GetBytes(hostname);
sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
sock.SendTo(data, iep1);
sock.SendTo(data, iep2);
sock.Close();
}
}
클라이언트에 대해 다음과 같이
내 수신기 코드는 ...
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class RecvBroadcst
{
public static void Main()
{
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
While(true){
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050);
sock.Bind(iep);
EndPoint ep = (EndPoint)iep;
Console.WriteLine("Ready to receive...");
byte[] data = new byte[1024];
int recv = sock.ReceiveFrom(data, ref ep);
string stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("received: {0} from: {1}",
stringData, ep.ToString());
data = new byte[1024];
recv = sock.ReceiveFrom(data, ref ep);
stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("received: {0} from: {1}",
stringData, ep.ToString());
}
sock.Close();
}
}
가 어떻게 클라이언트가 하나 개 이상의 방송을 수신 할 수있는 다음과 같이 방송에 대한 나의 서버 코드는 ...입니다
하나 이상의 서버 브로드 캐스팅이있을 때의 메시지? 내가 서버에서 다시 메시지를 보낼 때와 같은 그 던지는 오류 "각 소켓 주소 (프로토콜/네트워크 주소/포트)는 하나만 사용할 일반적으로 허용된다"
당신은과 같은 소켓 인스턴스에Bind
를 호출
수신자 프로그램은 하나의 메시지를 수신하자마자 '갑자기 종료됩니다'라고 쓰는 방법입니다. 둘 이상의 메시지를 수신하려면 그에 따라 코드를 조정하십시오. 여기서 뭐가 문제 야? – EJP
나는 진실한 동안 그 코드를 넣었지만, 서버로부터 다음 메시지를 보낼 때 어떤 메시지를 가지고 있어도 상관이 없다. 내 업데이트 된 질문을 참조하시오. –
프로그램은 단지 "닫힌"것이 아닙니다. 처리되지 않은 예외로 인해 실패합니다. 예외를 해석하는 것이 중요합니다. – usr