首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C套接字编程,2个客户端同时查询

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

Stack Overflow用户
提问于 2010-08-10 00:05:00
回答 2查看 2.4K关注 0票数 1

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

代码语言:javascript
复制
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的查询并搜索服务器。我确实创建了两个套接字,但是客户端在两个终端上都退出了。

EN

回答 2

Stack Overflow用户

发布于 2010-08-10 00:10:02

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

票数 0
EN

Stack Overflow用户

发布于 2010-08-10 00:44:32

  1. 使用函数

()创建TCP套接字。

  1. 使用bind()将端口号分配给套接字。
  2. 使用listen()系统允许连接到该端口。
  3. 重复以下操作:

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

b.使用send()和recv(),您可以通过这个新套接字与客户端通信。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3441922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档