客户端-服务器程序:客户端可以很容易地连接到服务器,但由于目标机主动拒绝连接,服务器无法响应

本文关键字:服务器 连接 客户端 目标机 响应 拒绝 程序 很容易 | 更新日期: 2023-09-27 18:16:34

我第一次尝试编写客户机-服务器程序。它在局域网网络上工作得很好,但我不能在互联网上工作。

我可以很容易地发送数据到服务器程序与以下代码:

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*

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

提前感谢,避署

客户端-服务器程序:客户端可以很容易地连接到服务器,但由于目标机主动拒绝连接,服务器无法响应

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

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;
}