我决定看看网络消息传递等,我的第一个呼叫端口是 UDP。
我遇到的问题是当我尝试发送消息时。我正在尝试在特定端口上访问 IP,但应用程序错误并出现错误
“SocketException 一个现有的连接被远程主机强行关闭”。
这是代码。
User ME = new User();
UdpClient MyUDPClient;
private void Form1_Load(object sender, EventArgs e)
{
ME.Username = Environment.UserName;
}
private void StartUDP_Click(object sender, EventArgs e)
{
CreateUDPClient();
}
private void CreateUDPClient()
{
IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in host.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
int Port = int.Parse(txt_Port.Text);
ME.UserIP = new IPEndPoint(ip, Port);
break;
}
}
MyUDPClient = new UdpClient(ME.UserIP);
UDPListening();
}
public void UDPListening()
{
MyUDPClient.BeginReceive(ReceiveMessage, new object());
}
private void ReceiveMessage(IAsyncResult IAR)
{
byte[] B = MyUDPClient.EndReceive(IAR, ref ME.UserIP);
ProcessMSG(Encoding.ASCII.GetString(B));
UDPListening();
}
delegate void MessageDelegate(String MSG);
public void ProcessMSG(String M)
{
if (this.lbl_Messages.InvokeRequired)
{
MessageDelegate Del = new MessageDelegate(ProcessMSG);
this.Invoke(Del, M);
}
else
{
lbl_Messages.Text = M;
}
}
//Send Data to Another version of this program elsewhere.
private void btn_SendtoTarget_Click(object sender, EventArgs e)
{
IPEndPoint TargetIP = new IPEndPoint(IPAddress.Parse(txt_Send2IP.Text),int.Parse(txt_Send2Port.Text));
byte[] Message = Encoding.ASCII.GetBytes("TEST TEST TEST");
MyUDPClient.Send(Message, Message.Length, TargetIP);
}
}
谢谢您的帮助。
不确定这是否有帮助,但...
应用程序在设置为侦听的机器上运行,位于 192.168.0.25:5555
发送正在尝试发送到机器 192.168.0.50:10001
吨
通过进一步阅读,我认为我的具体问题是创建 UDPclient 对象。它被创建,然后在 ip 192.168.0.25:5555 上监听。当我尝试发送消息时,我尝试使用相同的 UDPClient 但发送到新 IP。我觉得这不是正确的程序,因此它试图关闭以前的程序???我相信有人可以证实这一点。所以这向我建议,要拥有有效的 UDP 网络(UP 和 Down),我需要有一个 UDPclient 接收和第二个 UDP 才能发送(这对于我想要命中的每个目标地址都是动态的)。再一次,这都是猜测工作,如果我有这个,我希望有人可以提供一些指示。