0

我第一次尝试编写客户端-服务器程序。它在 LAN 网络上运行良好,但我无法让它在互联网上运行。

我可以使用以下代码轻松地将数据发送到服务器程序:

public static bool sendTo(IPEndPoint ip, String data)
    {
        using (TcpClient c = new TcpClient())
        {
            try
            {
                c.Connect(ip);
                NetworkStream clientStream = c.GetStream();
                ASCIIEncoding encoder = new ASCIIEncoding();
                byte[] buffer = encoder.GetBytes(data);

                clientStream.Write(buffer, 0, buffer.Length);
                clientStream.Flush();
                c.Close();
            }
            catch
            {
                c.Close();
                return false;
            }
        }
        return true;
   }

然后服务器必须使用相同的代码响应客户端,但它无法给出以下错误:

无法建立连接,因为目标机器主动拒绝它IP :*PORT*

我知道这个问题可以通过端口转发和更改路由器的设置来解决。但我可能会尽快尝试制作一个软件,用户应该能够以最少的配置使用该软件。所以...我想知道是否有人可以在这里帮助我...

在此先感谢, eLe

4

1 回答 1

0

您需要设计您的客户端和服务器,以便客户端到服务器的连接保持打开状态以接收响应,然后执行以下操作:

public static bool sendTo(IPEndPoint ip, String data)
{
    TcpClient client = null;
    NetworkStream stream = null;
    StreamWriter writer = null;
    StreamReader reader = null;

    try
    {
        client = new TcpClient();
        client.Connect(ip);
        stream = c.GetStream();
        writer = new StreamWriter(stream);
        writer.WriteLine(data);
        writer.Flush();

        reader = new StreamReader(stream);
        string response = reader.ReadLine();

        if (response == "roger-alpha-tango")
        {
            return true;
        }
    }
    catch
    {
        return false;
    }
    finally
    {
        if (writer != null) writer .Dispose();
        if (reader != null) reader .Dispose();
        if (stream != null) stream.Dispose();
        if (client != null) { client.Close(); client.Dispose(); }
    }

    return false;
}
于 2013-06-02T20:41:01.067 回答