그룹의 모든 구성원에게 메시지를 보내려고합니다. 보낸 사람 :UDP 멀티 캐스팅. C#
// Create socket
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
// Multicast IP-address
IPAddress ip = IPAddress.Parse("224.168.55.25");
// Join multicast group
s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip));
// TTL
s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 2);
// Create an endpoint
IPEndPoint ipep = new IPEndPoint(ip, 4567);
// Connect to the endpoint
s.Connect(ipep);
// Scan message
while (true)
{
byte[] buffer = new byte[1024];
string msg = Console.ReadLine();
buffer = Encoding.ASCII.GetBytes(msg);
s.Send(buffer, buffer.Length, SocketFlags.None);
if (msg.Equals("Bye!", StringComparison.Ordinal))
break;
}
// Close socket
s.Close();
수신기 :
// Create new socket
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
// Create IP endpoint
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 4567);
// Bind endpoint to the socket
s.Bind(ipep);
// Multicast IP-address
IPAddress ip = IPAddress.Parse("224.168.55.25");
// Add socket to the multicast group
s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, IPAddress.Any));
// Receive messages
while (true)
{
byte[] data = new byte[1024];
s.Receive(data);
string str = System.Text.Encoding.ASCII.GetString(data, 0, data.Length);
Console.WriteLine(str.Trim());
if (str.Equals("Bye!", StringComparison.Ordinal))
{
break;
}
}
내가 클라이언트 측에서 선별을 인쇄 할 때 메시지 사이에 충분한 여유 공간이 왜 uderstand하지? 메시지를 수신 한 후 Receiver
프로그램의 루프가 멈추지 않는 이유는 무엇입니까? 이 문제를 어떻게 해결할 수 있습니까?
대단히 감사합니다!
리시버가 루프를 빠져 나오게하는 요인은 무엇입니까? 이것은 말이되지 않습니다. –
@Daniel Kelley, 보낸 사람에 루프가 깨졌을 때 콘솔에 다음과 같이 쓰여 있습니다 : '계속하려면 아무 키나 누르십시오 ...'그래서 클라이언트 쪽의 루프는 stil 리스닝이기 때문에 중단되지 않습니다. – user3649515
글쎄, 코드가 편집되어 어디에서 깨지기 쉬운 지 알 수 있습니다. –