C# 当存在多个服务器广播时,客户端如何接收多个广播消息?
我正在使用system.Net.Socket从服务器向客户端发送和接收消息。但当多个服务器广播消息时,接收器程序突然关闭,我遇到了问题 我的广播服务器代码如下C# 当存在多个服务器广播时,客户端如何接收多个广播消息?,c#,sockets,client-server,broadcastreceiver,inter-process-communicat,C#,Sockets,Client Server,Broadcastreceiver,Inter Process Communicat,我正在使用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
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
(每次迭代一次)。您应该调用Bind
一次。我已经用接收方的following解决了上述代码更改的问题。我每次都绑定套接字,所以我现在只绑定一次,每次只迭代从指定端口传入的数据
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);
// int port_no=Convert.ToInt32(sock.RemoteEndPoint);
int portnumber = 9050;
sock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any,portnumber);
sock.Bind(iep);
EndPoint ep = (EndPoint)iep;
Console.WriteLine("Ready to receive...");
// int port_no = Convert.ToInt32(sock.RemoteEndPoint);
while (true)
{
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());
data = null;
}
//portnumber--;
sock.Close();
}
}
我刚刚成功。感谢您的回复。这非常有帮助。您的接收器程序在收到一条消息后立即“突然退出”,因为这就是您编写它的方式。如果希望它接收多条消息,请相应地调整代码。这里的问题是什么?我输入了该代码,虽然该代码为true,但当从服务器发送下一条消息时,该代码已关闭,并且应该有任何消息。请参阅我的更新问题该程序不仅仅是“关闭”。由于未处理的异常,它失败。解释这一例外情况很重要。