开始使用简单的UDPClient程序进行套接字编程以发送一些数据。大型代码段如下:
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
class ShowIP
{
public static void Main(string[] args)
{
string name = Dns.GetHostName();
//name = "GSL1460";
name = "GSL1296";
try
{
IPAddress[] addrs = Dns.GetHostEntry(name).AddressList;
foreach (IPAddress addr in addrs)
Console.WriteLine("{0}/{1}", name, addr);
Console.WriteLine("Started listening");
Thread listenerThread = new Thread(new ThreadStart(StartListeningUDP));
listenerThread.Start();
Console.WriteLine("Started sending");
for (int counter = 0; counter <= 3; counter++)
{
Thread.Sleep(1000);
Console.WriteLine("Sending {0} time", counter.ToString());
StartSendingUDP(addrs[0]);
}
Console.ReadLine();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
private static void StartListeningUDP()
{
UdpClient udpListener = null;
IPEndPoint nwPoint = new IPEndPoint(IPAddress.Any, 12345);
while (true)
{
try
{
udpListener = new UdpClient(12345);
Console.WriteLine("Waiting to receive");
Byte[] receivedBytes = udpListener.Receive(ref nwPoint);
string receivedData = Encoding.ASCII.GetString(receivedBytes);
Console.WriteLine("Data received : " + receivedData);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
udpListener.Close();
}
}
}
private static void StartSendingUDP(IPAddress clientAddress)
{
UdpClient udpSender = new UdpClient();
try
{
Byte[] sendBytes = Encoding.ASCII.GetBytes("Say HI to Papa...");
Console.WriteLine("Data Sent : Say HI to Papa...");
udpSender.Send(sendBytes, sendBytes.Length, new IPEndPoint(clientAddress, 12345));
}
finally
{
udpSender.Close();
}
}
}
示例在本地计算机上运行正常,但无法将数据发送到Intranet上的其他计算机。
测试期间
我错过了什么吗?请建议。
答案 0 :(得分:1)
udpSender.Flush?
答案 1 :(得分:0)
我不是C#人,所以我不能对你的代码发表太多评论,但看起来基本没问题。确保您发送到的IP地址正在正确解析到您的接收设备。
另外,查看Windows是否已对您的互联网连接进行防火墙处理,如果是,请尝试禁用防火墙。而且,我知道微软有一些关于“安全”代码的想法,这些代码在过去曾给我们带来了一些问题。我没有任何细节,但项目中可能存在一些设置,使其无法访问网络。
答案 2 :(得分:0)
UDP-Listener可能只在localhost上侦听。您可以尝试替换
udpListener = new UdpClient(12345)
使用在StartListeningUDP()中
udpListener = new UdpClient(new IPEndPoint(IPAddress.Any,12345))
答案 3 :(得分:0)
如果没有做过一些事情,你无法真正通过互联网发送UDP。 你将获得太多的udp过滤器。 即使您将禁用防火墙,您的路由器/提供商调制解调器也可以设置为阻止它。 否则 - 您的提供商服务器将阻止它。 所以实际上你必须确保这个端口对UDP是开放的,就像你在本地主机上一样,除非你在防火墙中打开这个端口和/或安装环回适配器,否则它将无法工作