Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.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/2/.net/21.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#套接字服务器没有超过800个客户端_C#_.net_Sockets_Networking - Fatal编程技术网

C#套接字服务器没有超过800个客户端

C#套接字服务器没有超过800个客户端,c#,.net,sockets,networking,C#,.net,Sockets,Networking,我有一个C#socket服务器。最多可连接到服务器的客户端数约为800。如果客户端超过800个,则新客户端会收到套接字错误WSAECONNREFLESSED 10061。 raizeup max客户端数是多少 套接字在Socket.BeginXXX和Socket.EndXXX之间写入。目标:框架4.0。协议:IP4、TCP将serversocket设置为其侦听状态时,可以设置积压工作。这是可以等待接受的最大连接数 其他一切都可能是硬件问题-尝试在其他机器上运行该程序 下面是一个例子 Socket

我有一个C#socket服务器。最多可连接到服务器的客户端数约为800。如果客户端超过800个,则新客户端会收到套接字错误WSAECONNREFLESSED 10061。 raizeup max客户端数是多少


套接字在Socket.BeginXXX和Socket.EndXXX之间写入。目标:框架4.0。协议:IP4、TCP

将serversocket设置为其侦听状态时,可以设置积压工作。这是可以等待接受的最大连接数

其他一切都可能是硬件问题-尝试在其他机器上运行该程序

下面是一个例子

Socket serversocket = ...
serversocket.Listen(1000);

侦听器待办事项队列已满。当待办事项队列已满时,Windows将开始向进一步的传入连接发送RST,这些连接在相关客户端被“拒绝连接”。您可以根据这里的其他答案提高待办事项队列长度,但它真正的意思是您的处理速度不够快。仔细看一看实现这一点的代码,并对路径进行润滑。确保它不执行任何其他操作,例如阻塞I/O、磁盘I/O和其他网络操作。一旦连接被接受,它将退出待办事项队列,以便其他传入连接可以成功。

您好,我找到了问题的答案。我为接受连接创建了额外的线程。例如:

先前的

IPEndPoint myEndpoint = new IPEndPoint(IPAddress.Parse(_serverAddress), _port);
 _serverSocket = new Socket(myEndpoint.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

 _serverSocket.Bind(myEndpoint);
 _serverSocket.Listen((int)SocketOptionName.MaxConnections);

_serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), _serverSocket);

.....


private void AcceptCallback(IAsyncResult result)
        {
            ConnectionInfo connection = new ConnectionInfo();
            try
            {
                Socket s = (Socket)result.AsyncState;
                connection.Socket = s.EndAccept(result);

                connection.Buffer = new byte[1024];
                connection.Socket.BeginReceive(connection.Buffer,
                    0, connection.Buffer.Length, SocketFlags.None,
                    new AsyncCallback(ReceiveCallback),
                    connection);
            }
            catch (SocketException exc)
            {
                CloseConnection(connection, "Exception in Accept");
            }
            catch (Exception exc)
            {
                CloseConnection(connection, "Exception in Accept");
            }
            finally
            {

                    _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), result.AsyncState);
            }
        }
通过这种方式,客户端连接计数为800

目前我写的是:

 IPEndPoint myEndpoint = new IPEndPoint(IPAddress.Parse(_serverAddress), _port);
 _serverSocket = new Socket(myEndpoint.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

 _serverSocket.Bind(myEndpoint);
 _serverSocket.Listen((int)SocketOptionName.MaxConnections);

acceptThread = new Thread(new ThreadStart(ExecuteAccept));
acceptThread.Start();

......

private void ExecuteAccept()
        {

            while (true)
            {

                ConnectionInfo connection = new ConnectionInfo();
                try
                {
                    connection.Socket = _serverSocket.Accept();

                    connection.Buffer = new byte[1024];
                    connection.Socket.BeginReceive(connection.Buffer, 0, connection.Buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), connection);
                }
                catch (SocketException exc)
                {
                    CloseConnection(connection, "Exception in Accept");
                }
                catch (Exception exc)
                {
                    CloseConnection(connection, "Exception in Accept");
                }
            }
        }

通过这种方式,客户机连接数超过2000。我对BeginXXX和EndXXX进行读写操作。

听起来侦听器队列已满。您可以粘贴一些代码吗?路由器或防火墙也可以限制可用端口的范围。@Groo这里只有一个端口,服务器正在侦听的端口。硬件问题如何解决?硬件怎么会导致TCP重置和拒绝连接?我一直在考虑网卡的问题。这是一个假设,可能是完全不相关的。我很困惑,有没有人能更清楚地说明这一点。。。如果我有一个循环可以创建1000个到侦听器的连接。。。为什么我会得到“附加信息:无法建立连接,因为目标计算机主动拒绝了它”当有类似MaxConnectoins=2147483647的积压时。。。如何编写代码在侦听器上监视此操作。。。ie如何知道侦听器何时拒绝连接。。。这就是它正在做的。错误代码10061 plz help thx