开发者

UDP client in C#

Am trying to make a simple UDP application using C sharp,nothing sophisticated,connect,send some text,and receive it! but it keeps throwing this exception!

"An existing connection was forcibly closed by the remote host"!

The code :

     byte[] data = new byte[1024];
    IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);

    Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

    string welcome = "Hello, are you there?";
    data = Encoding.ASCII.GetBytes(welcome);
    server.SendTo(data, data.Length, SocketFlags.None, ipep);

    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
    EndPoint tmpRemote = (EndPoint)sender;

   data = new byte[1024];
    int recv = server.ReceiveFrom(data, ref tmpRemote);

    Console.WriteLine("Message received from {0}:", tmpRemote.ToString());
    Console.WriteLine(Encoding.ASCII.GetString(data, 0, rec开发者_StackOverflowv));



    Console.WriteLine("Stopping client");
    server.Close();

thanks =)


You should tell the system that you are listening for UDP packets on port 9050 before you call Receive. Add server.Bind(ipep); after Socket server = new Socket(...);


Have you tried checking that the IP address is valid and the port is not being used for something else?

Windows:

Start > Run > "cmd" > "ipconfig".


Try turning off your firewall software.


If you do not know the IP of the answering server, you better do: recv = server.Receive(data);

Here is my suggetion to your code. You can use a do-while loop using a condition (in my example it is an infinite loop):

        byte[] data = new byte[1024];
        IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);

        Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

        string welcome = "Hello, are you there?";
        data = Encoding.ASCII.GetBytes(welcome);
        server.ReceiveTimeout = 10000; //1second timeout
        int rslt =  server.SendTo(data, data.Length, SocketFlags.None, ipep);

        data = new byte[1024];
        int recv = 0;
        do
        {
            try
            {
                Console.WriteLine("Start time: " + DateTime.Now.ToString());
                recv = server.Receive(data); //the code will be stoped hier untill the time out is passed
            }
            catch {  }
        } while (true); //carefoul! infinite loop!

        Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
        Console.WriteLine("Stopping client");
        server.Close();
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜