C套接字编程,2个客户端查询同时进行

时间:2010-08-09 16:05:00

标签: c sockets concurrency

我的客户端如何同时向服务器发送两个查询(在两个不同的终端中)?当我尝试它时,只有一个工作,另一个关闭插座。

main  ()
  {

    readData ();
    int serverFd, clientFd, clientFd2,serverLen, clientLen;
    struct sockaddr_un serverAddress;/* Server address */
    struct sockaddr_un clientAddress; /* Client address */
    struct sockaddr* serverSockAddrPtr; /* Ptr to server address */
    struct sockaddr* clientSockAddrPtr; /* Ptr to client address */

    /* Ignore death-of-child signals to prevent zombies */
    signal (SIGCHLD, SIG_IGN);

    serverSockAddrPtr = (struct sockaddr*) &serverAddress;
    serverLen = sizeof (serverAddress);

    clientSockAddrPtr = (struct sockaddr*) &clientAddress;
    clientLen = sizeof (clientAddress);

    /* Create a socket, bidirectional, default protocol */
    serverFd = socket (AF_LOCAL, SOCK_STREAM, DEFAULT_PROTOCOL);
    serverAddress.sun_family = AF_LOCAL; /* Set domain type */
    strcpy (serverAddress.sun_path, "countries"); /* Set name */
    unlink ("countries"); /* Remove file if it already exists */
    bind (serverFd, serverSockAddrPtr, serverLen); /* Create file */
    listen (serverFd, 5); /* Maximum pending connection length */

    while (1) /* Loop forever */
      {
        /* Accept a client connection */
        clientFd = accept (serverFd, clientSockAddrPtr, &clientLen);


        while (fork () == 0) /* Create child to send recipe */
          {
int recvquery;
char countrynamereceivedquery[200];
while (recvquery=read(clientFd,countrynamereceivedquery,sizeof(countrynamereceivedquery)))
{
//print results

}
}

这就是我的服务器程序。我将它作为后台进程运行,然后运行客户端程序,它可以搜索存储在服务器中的数组中的文本文件。现在,当我打开两个终端并同时运行客户端时,一个客户端退出程序,另一个客户端收到jus-quit-client的查询并搜索服务器。我确实创建了两个套接字,但客户端只是在两个终端中退出。

2 个答案:

答案 0 :(得分:0)

假设服务器一次允许多个连接,您可以创建一个不同的套接字并使用它来打开与服务器的另一个连接。

答案 1 :(得分:0)

  1. 使用函数socket()来 创建一个TCP套接字。

  2. 您将带有bind()的端口号分配给套接字。

  3. 使用listen(),系统允许连接到该端口。

  4. 重复以下步骤:

    一个。 accept()为每个连接的客户端获取一个新套接字。

    湾使用send()和recv(),您可以通过新套接字与客户端进行通信。

    ℃。最后,使用函数close()关闭客户端连接。