我决定研究网络消息传递等内容,我的第一个调查对象是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的机器上
T
通过进一步阅读,我认为我的问题在于创建UDPClient对象。它被创建并在ip 192.168.0.25:5555上进行监听。当我尝试发送消息时,我尝试使用相同的UDPClient,但是发送到一个新的IP地址。我感觉这不是正确的程序流程,因此它正在尝试关闭先前的连接吗? 我确定有人能够确认这一点。因此,这会提示我要实现有效的UDP网络(向上和向下),我需要有一个UDP客户端接收和第二个UDP客户端能够发送(动态发送到每个目标地址)。再次强调,这都是猜测,如果我有这个,我希望有人能够提供一些指导。