c - 管理连接到多个主机的套接字

标签 c sockets

我有一个像服务器一样工作的程序( listen() s、 bind() s 和 accept() s 来自其他 IP 中相同程序的多个连接),同时像 UNIX 一样接受用户输入外壳。

用户输入的是命令,有一个命令 CONNECT具有地址和端口号规范。

我想让它连接到多个主机,我想我必须为每个连接使用一个套接字。

当我在 CONNECT 上创建套接字时来自用户的请求,我如何管理这些套接字?

我应该使用全局 array套接字并在建立连接时创建并向其添加套接字?

最佳答案

我假设您想在服务器中管理多个客户端。正确的?

因此,您必须全局获取一些预定义的套接字数组,然后为每个套接字提供服务

例如。

long accept_sock[10];//This should be global
                     //initilize it with -1 at entry point
while(1)
{
    struct sockaddr   client;  /* for BSDish accept() call */
    int               clientsize;
    clientsize = sizeof(struct sockaddr_in);
    long sock ;

    for(int i=0;i<10;i++)
    {
        if(accept_sock[i] == -1)
        {    
            sock= accept(server_sock, &client, &clientsize);

            if(sock != -1)
            {
                acepct_sock[i] =sock;
                break;
            }
        }
    }

    for(int i=0;i<10;i++)
    {
        if(accept_sock[i] != -1)
        {    
          //do process 
        }
    }
}

关于c - 管理连接到多个主机的套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25779479/

相关文章:

c++ - 关闭套接字时防止 FIN_WAIT2

检查指向数组的指针的第一个字符

c++ - 函数属性应该放在哪里?

windows - UDP 数据包,被 Wireshark 看到,被(甚至没有到达)WSARecvFrom 丢弃

Java HttpURLConnection : Can it cope with duplicate header names?

c - 在 C 中使用套接字处理不同大小的数据包

java - 如何知道我们是否收到了带有 DatagramPacket 的内容?

c - 如何保护 isr 和常规函数共享的全局变量?

c - 这里是新手。 C函数执行过程中出现问题

c - 如何在 c 中打印字符的十进制表示形式?