Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法建立连接,因为目标计算机主动拒绝它(C#)_C#_Sockets_Client Server - Fatal编程技术网

无法建立连接,因为目标计算机主动拒绝它(C#)

无法建立连接,因为目标计算机主动拒绝它(C#),c#,sockets,client-server,C#,Sockets,Client Server,请原谅我重复的问题。我知道这里已经问过很多次了,但是没有一个答案对我有效,也没有一个场景与我的完全相同,而且许多问题根本没有答案 我已经为一所大学做了几个星期的项目,但现在我的任务是将完整的工作应用程序更改为客户机-服务器应用程序(项目的细节无关紧要)。我计划创建一个控制台应用程序,它将被隐藏并充当服务器(主要处理将在我的数据库上执行的SQL查询,然后根据这些查询的结果创建对象,将它们序列化并发送到客户端)。客户端应用程序是一个Windows窗体应用程序 我不熟悉使用套接字(3天前才开始使用它们

请原谅我重复的问题。我知道这里已经问过很多次了,但是没有一个答案对我有效,也没有一个场景与我的完全相同,而且许多问题根本没有答案

我已经为一所大学做了几个星期的项目,但现在我的任务是将完整的工作应用程序更改为客户机-服务器应用程序(项目的细节无关紧要)。我计划创建一个控制台应用程序,它将被隐藏并充当服务器(主要处理将在我的数据库上执行的SQL查询,然后根据这些查询的结果创建对象,将它们序列化并发送到客户端)。客户端应用程序是一个Windows窗体应用程序

我不熟悉使用套接字(3天前才开始使用它们,但我相信我对它们非常了解——我能够根据知识(和逻辑)重新创建一个客户机-服务器聊天应用程序,而无需参考所给的代码。)

我做了很多研究试图修复它,但现在我已经尝试了一切,我希望有人能帮助我

我遇到的问题是,我的客户端无法连接到服务器。在我的“实践”应用程序中,我没有遇到这个问题,客户端总是能够连接

我试过:

  • 允许服务器(控制台)和客户端(窗体)应用程序通过防火墙
  • 完全禁用防火墙
  • 确保服务器正在侦听客户端上给定的正确端口号
  • 我甚至从我的项目中复制粘贴了代码(仅仅是套接字部分),并创建了新的服务器和客户端应用程序(这些应用程序工作得非常好,完全相同的代码,放在与原始应用程序完全相同的位置,在新的“测试”应用程序中工作得很好,但在我的项目中没有)
在尝试了这些没有成功的事情之后,我意识到问题很可能不是防火墙,我使用的端口号也不会有问题,因为在我的“测试”应用程序中使用了完全相同的代码和相同的端口号

我尝试按照以下答案运行netstat-anb: 我在任何地方都看不到端口号

我在stackoverflow上看到的其他一些答案对我没有帮助,因为大多数答案都使用web服务或实际的服务器软件,这在我的情况下是不相关或不允许的

我已经尝试提供尽可能多的信息,这是我的代码。任何帮助都将不胜感激

服务器代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HelperLibrary;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace Farmulator_PRG221_Project
{
class Program
{

    static void Main(string[] args)
    {
        Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
        serverSocket.Bind(new IPEndPoint(IPAddress.Loopback, port: 9000));
        serverSocket.Listen(50);
        Thread accepterThread = new Thread(new ParameterizedThreadStart(Accept));
        accepterThread.Start(serverSocket);
    }

    static void Accept(object obj)
    {
        Socket serverSocket = (Socket)obj;

        while (true)
        {
            Socket clientSocket = serverSocket.Accept();
            Console.WriteLine("New client connected!");

        }

    }
客户端代码:

clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
clientSocket.Connect(new IPEndPoint(IPAddress.Loopback, port: 9000));

可能是TLS问题。尝试启用TLS。。它需要在.Net 4.6及更高版本中显式设置。可能与实际问题无关,但您应该在服务器
Main
的末尾添加
Console.ReadLine()
或类似内容。如果不这样做,
accepterThread
将超出作用域,GC可以收集它,从而杀死服务器线程。此外,请尝试
netstat-aonb
(与您之前运行的一样,但包括
o
)并确保服务器上端口9000上侦听的PID是您的服务器应用程序进程ID。检查可能看起来很愚蠢,但值得确定。我假设客户端和服务器在同一台机器上?您正在使用
环回
,因此它们必须是环回,但您没有在问题中说明这一点。@Trevor很抱歉,我忘了提到“是”,客户端和服务器将在同一台计算机上。谢谢你们的帮助,伙计们,我让它工作了,这是一个愚蠢的错误,与插座无关。感谢您提供有关
控制台.ReadLine()
的提示,我认为这不是问题,因为accepterThread处于无休止的while循环中,但为了安全起见,我添加了它。