【问题标题】:Socket only work on same network套接字仅在同一网络上工作
【发布时间】:2015-05-24 02:18:42
【问题描述】:

我有一个服务器-客户端套接字代码,当服务器和客户端在同一个网络上打开时它工作正常,但如果我尝试在不同的网络上运行它们,它们就无法识别彼此。 可能是什么问题?

服务器:

        public static TcpListener listen;
    static void Main(string[] args)
    {
        Console.Title = "Server";
         listen = new TcpListener(8080);
        listen.Start();
        Console.WriteLine("Wait For Connect");
        Socket s = listen.AcceptSocket();
        Console.WriteLine("Client Has Been Connected");
        read r = new read(s);
        Thread t = new Thread(new ThreadStart(r.Reading));
        t.Start();
        NetworkStream st = new NetworkStream(s);
        StreamWriter sw = new StreamWriter(st);
        sw.AutoFlush = true;
        string massege;
        while (true)
        {
            massege = "server" + ":" + Console.ReadLine();
            sw.WriteLine(massege);
        }

    }
    class read
    {
        private StreamReader sr;
        public read(Socket s)
        {
            Stream a = new NetworkStream(s);
            this.sr = new StreamReader(a);
        }
        public void Reading()
        {
            while (true)
            {
                try
                {
                    Console.WriteLine(sr.ReadLine());
                }
                catch
                {
                    Console.WriteLine("Client Has Disconnected");
                  //  Console.ReadKey();
                    Socket s = listen.AcceptSocket();
                    Console.WriteLine("Client Has Been Connected");

                }

            }


        }
    }
}

客户:

        static void Main(string[] args)
    {
        Console.Title = "Client";

        bool connect = false;
        while (!connect)
        {
            try
            {
                TcpClient t = new TcpClient();
                t.Connect("192.168.43.36", 8080);
                Console.WriteLine("Connect!");
                connect = true;
                NetworkStream ns = t.GetStream();
                read r = new read(t);
                Thread tr = new Thread(new ThreadStart(r.startread));
                tr.Start();
                StreamWriter sw = new StreamWriter(ns);
                sw.AutoFlush = true;
                string massege;
                while (true)
                {
                    massege = "client" + ":" + Console.ReadLine();
                    sw.WriteLine(massege);
                }

            }
            catch
            {
                Console.WriteLine("Connection Faild!");
                connect = false;
            }
        }
    }


    class read
    {
        StreamReader sr;
        public read(TcpClient t)
        {
            Stream s = t.GetStream();
            this.sr = new StreamReader(s);
        }
        public void startread()
        {
            while (true)
            {
                try
                {
                    string s = sr.ReadLine();
                    Console.WriteLine(s);
                }
                catch
                {
                    Console.WriteLine("Server Error");
                    Console.Read();
                }
            }
        }
    }
}

感谢您的帮助。

【问题讨论】:

  • 最明显的是防火墙。
  • 你必须使用wireshark来查看网络上发生了什么。
  • 使用不同的网络,您确实是指不同的子网吧?

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


【解决方案1】:

根据您的描述很难真正解决正在发生的事情。但这里列出了我会做的事情:

  • 检查客户端是否有防火墙
  • 检查服务器端是否有防火墙
  • 检查您是否没有 NAT/PAT 问题。如果您的服务器在您的电脑上,并且您使用启用了 NAT/PAT 的 ADSL 型号、电缆调制解调器或家用路由器,那么这不起作用是正常的。
  • 在客户端和服务器上都安装wireshark,看看线路上有什么。

如果您实际上是在 NAT/PAT 设备后面,您可以安装端口转发和/或将您的服务器电脑放在隔离区。

【讨论】:

  • 其中一台计算机连接到路由器,所以问题出在哪里?
  • 是的,它很可能是一个 NAT/PAT 路由器。
  • 如果这对您有帮助,请点赞和/或标记为解决方案。
猜你喜欢
  • 2015-12-19
  • 1970-01-01
  • 2013-03-18
  • 2016-10-09
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
相关资源
最近更新 更多