Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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_Networking_Network Programming_Vxworks - Fatal编程技术网

C 如何限制客户端-服务器程序中的连接数

C 如何限制客户端-服务器程序中的连接数,c,networking,network-programming,vxworks,C,Networking,Network Programming,Vxworks,我想要一个服务器程序,它应该只接受最多一个连接,并应放弃其他连接。如何实现这一点?要拒绝所有连接还是排队? 我想你要找的是所谓的“单身汉”。 查看wikipadia中的Singleton设计模式。要拒绝所有连接还是创建队列? 我想你要找的是所谓的“单身汉”。 查看wikipadia以了解单例设计模式。更正请参见下方: 您可以在listen方法中定义接受请求的数量 第二个参数用于设置挂起连接的数量,而不是连接本身的数量 如果将numberOfConnections设置为1,则向服务器发送请求的所有

我想要一个服务器程序,它应该只接受最多一个连接,并应放弃其他连接。如何实现这一点?

要拒绝所有连接还是排队? 我想你要找的是所谓的“单身汉”。
查看wikipadia中的Singleton设计模式。

要拒绝所有连接还是创建队列? 我想你要找的是所谓的“单身汉”。
查看wikipadia以了解单例设计模式。

更正请参见下方:
您可以在listen方法中定义接受请求的数量

第二个参数用于设置挂起连接的数量,而不是连接本身的数量

如果将numberOfConnections设置为1,则向服务器发送请求的所有其他客户端都将收到超时错误

在这里您可以找到更多信息:


我把文件看错了。您应该使用Matt答案中描述的accept方法。

更正请参见下方:
您可以在listen方法中定义接受请求的数量

第二个参数用于设置挂起连接的数量,而不是连接本身的数量

如果将numberOfConnections设置为1,则向服务器发送请求的所有其他客户端都将收到超时错误

在这里您可以找到更多信息:

我把文件看错了。您应该使用Matt答案中描述的accept方法。

accept()
单个连接

下面是一个典型的服务器例程:

s = socket(...);
bind(s, ...);
listen(s, backlog);
while (-1 != (t = accept(s, ...))) {
    // t is a new peer, maybe you push it into an array
    // or pass it off to some other part of the program
}
每次完成的调用都返回新连接的文件描述符。如果您只希望接收单个连接,请只接受一次
accept()
。大概在此之后您已经完成了监听,所以也请关闭服务器:

s = socket(...);
bind(s, ...);
listen(s, backlog);
t = accept(s, ...);
close(s);
// do stuff with t
如果您希望一次只处理一个连接,并且在该连接关闭后,继续侦听,然后执行上面的
accept()
循环,并确实接受进一步的连接,直到
t
关闭。

accept()
单个连接

下面是一个典型的服务器例程:

s = socket(...);
bind(s, ...);
listen(s, backlog);
while (-1 != (t = accept(s, ...))) {
    // t is a new peer, maybe you push it into an array
    // or pass it off to some other part of the program
}
每次完成的调用都返回新连接的文件描述符。如果您只希望接收单个连接,请只接受一次
accept()
。大概在此之后您已经完成了监听,所以也请关闭服务器:

s = socket(...);
bind(s, ...);
listen(s, backlog);
t = accept(s, ...);
close(s);
// do stuff with t


如果您希望一次只处理一个连接,并且在该连接关闭后,继续侦听,然后执行上面的
accept()
循环,并接受进一步的连接,直到
t
关闭。

我认为他不会找到C的单例模式;)我认为他不会找到C的单例模式;)如何提醒用户其他连接已处于活动状态,而此超时不是由于网络中断造成的?是否有任何方法可以检查上次打开的套接字描述符是否处于活动状态?我想您可以在accept方法中检查这一点。但是我不确定。。accept()返回一个正整数,它是所接受套接字的套接字描述符。如果发生错误,则返回-1,并设置errno以指示原因。检查此网站:这是不正确的,该值是backlog,是可能排队的不可接受连接数。感谢您的更正!我编辑了我的答案。不幸的是,我读了listen的文档,但没有读错……我如何才能提醒用户,其他连接已经处于活动状态,而这次超时不是由于网络中断造成的?有没有办法检查最后打开的套接字描述符是否处于活动状态?我想您可以在accept方法中检查这一点。但是我不确定。。accept()返回一个正整数,它是所接受套接字的套接字描述符。如果发生错误,则返回-1,并设置errno以指示原因。检查此网站:这是不正确的,该值是backlog,是可能排队的不可接受连接数。感谢您的更正!我编辑了我的答案。不幸的是,我读错了listen的文档…感谢您的宝贵意见,实际上我如何知道第一个连接是否已关闭?因为如果我的第一次连接在一段时间内是理想的?如果我收到一个新连接,在接受这个新连接之前,我必须检查第一个连接是否处于活动状态。我们有什么方法可以实现这种情况吗?当您从对等方已关闭的套接字中读取()时,它将返回0。您也可以通过调用
close()
shutdown()
自行关闭它。只要在您对连接完成感到满意之前,不要从函数处理中返回
t
。请记住,一次可以处理多个连接,但我认为处理单个连接是您的目标。非常棒的回答Matt Jonier,这里我们还有一个问题,假设读/写由其子进程处理,连接由其父进程处理。在这种情况下,我们需要IPC将数据从父进程发送到子进程,如果我们实际使用read()读取一些数据来检查连接状态,这不是开销吗?我们也有解决办法吗?我有一个解决办法。我们可以使用getpeername()检查当前活动连接的状态,是否会有任何副作用?我不确定这是否是正确的解决方案?请分享您的想法。您不需要任何IPC来使用孩子中的连接。如果希望告知连接已完成,最好终止子进程,并让父进程
wait()
。您没有同时使用服务器套接字和接受套接字,因此不需要
fork()
。另外,如果执行
fork()
,则