【发布时间】:2015-09-14 17:42:10
【问题描述】:
UDP 客户端只收到一条消息并冻结
定时器只运行一次,不知道如何跟随他来clinte UDP消息来
namespace temp {
public partial class Form1 : Form
{
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void label1_Click(object sender, EventArgs e)
{
}
}
只运行一次
private void timer1_Tick(object sender, EventArgs e) {
UdpClient client = new UdpClient();
IPEndPoint localEp = new IPEndPoint(IPAddress.Any, 22);
client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
client.Client.Bind(localEp);
IPAddress multicastaddress = IPAddress.Parse("127.0.0.1");
Byte[] data = client.Receive(ref localEp);
string mensaje = Encoding.UTF8.GetString(data);
label1.Text += "" + mensaje.ToString() + "";
}
【问题讨论】:
-
这段代码不是每个时钟滴答都会打开一个新客户端而不关闭任何客户端吗?
-
是真的收到消息还是卡在同步接收消息上?
-
@WDS 他说计时器只运行一次,如果那不是真的,当他试图在同一个端口上绑定两个套接字时,他会得到一个异常,无论如何都会阻止他。
-
为什么要使用定时器从套接字同步接收数据?为什么你在为 SSH 保留的端口上监听,同时期待 UTF-8 文本?此外,
ReuseAddress并没有按照您的想法执行 - 这只是意味着您在绑定到同一个地址两次时不会出错;这并不意味着所有的听众都会收到消息。这显然是您尝试过的事情,因为您没有干净地处理您的客户。请不要只是猜测网络的方式——这是一个非常复杂的主题,而且很容易出错。先了解你在做什么。