c linux套接字:检查客户端的现有连接

c linux套接字:检查客户端的现有连接,c,linux,sockets,C,Linux,Sockets,我有以下设置: 2台Ubuntu机器(服务器和客户端) 在“服务器”上,我运行此命令以将收到的所有数据回显给发送方(客户端): 在客户端上,我有一个只连接到远程套接字的简单应用程序:socket()->setsockopt()->connect() 所以。。。我的问题是:是否可以检查是否有其他应用程序已从客户端连接到套接字应用程序?在任何给定的时间,我只希望有一个进程连接到套接字,我希望从客户端应用程序检查这一点。这可能吗?谷歌搜索3小时后,我找不到任何相关信息:( (对不起,没有网络编程

我有以下设置:

  • 2台Ubuntu机器(服务器和客户端)
  • 在“服务器”上,我运行此命令以将收到的所有数据回显给发送方(客户端):

  • 在客户端上,我有一个只连接到远程套接字的简单应用程序:socket()->setsockopt()->connect()

所以。。。我的问题是:是否可以检查是否有其他应用程序已从客户端连接到套接字应用程序?在任何给定的时间,我只希望有一个进程连接到套接字,我希望从客户端应用程序检查这一点。这可能吗?谷歌搜索3小时后,我找不到任何相关信息:(


(对不起,没有网络编程经验)

在接受一个客户端后,您不能关闭服务器上的侦听套接字吗?如果没有侦听套接字,则将无法连接更多的客户端。一旦删除了一个客户端,您可以再次打开侦听套接字,准备再打开一个。这样,客户端将看到“失败”在服务器繁忙时连接,否则将正常成功

这种方法的缺点是,客户端无法确定其无法连接的确切原因,可能是因为客户端忙(只有一个客户端),也可能是因为其他问题。这有关系吗?

运行:

netstat -an | grep <your server port port number> 
netstat-an | grep

在客户端计算机上查看任何现有TCP连接。

否,客户端无法查看有多少其他客户端连接到服务器

为了能够检索此信息,需要在客户端和服务器上使用特定于应用程序的协议

无论如何,有一种特殊情况:如果客户机知道最多有N个客户机可以连接到服务器,并且它自己的尝试连接被拒绝,则可以假定N个客户机已经连接到服务器


要设置并行处理的最大连接数,请使用其选项
-m
/
--max conns
。逐字格式
man ncat

-m numconns,--max conns numconns(指定最大连接数)。 Ncat实例可接受的最大同时连接数。默认值为100


让我澄清一下:在客户端应用程序中,我想要这样的东西:如果(num_connections>1),然后取消连接。问题是我无法获得现有连接。我在考虑getsockopt(SO_PEERCRED)之类的东西,但它没有像我预期的那样工作:)在发布此问题之前,我尝试使用-m选项。使用“-m 1”,我仍然能够第二次连接(即使ncat打印“新连接被拒绝:已达到连接限制”),但我无法发送/接收数据。如果可能的话,我想限制连接本身。@Meh:正如我在回答中所说的,客户端不可能在不与服务器交谈的情况下从服务器获取任何信息,这意味着在套接字级别连接到服务器。我想这应该是答案。您可以在这里获得输出,应用正则表达式或计数行并应用逻辑。
netstat -an | grep <your server port port number>