测试套接字通信程序

时间:2009-03-03 12:32:27

标签: c# .net testing sockets network-programming

开始使用简单的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上的其他计算机。

测试期间

  • 取消注释将数据发送到他的计算机的相应代码
  • 在他的机器上运行Receiver位
  • 已检查所需端口是否已在其计算机上打开

我错过了什么吗?请建议。

4 个答案:

答案 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是开放的,就像你在本地主机上一样,除非你在防火墙中打开这个端口和/或安装环回适配器,否则它将无法工作