Как мой клиент может отправить два запроса (в двух разных терминалах) на сервер одновременно?Когда я пытаюсь это сделать, только один работает, другой закрывает сокет.
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 и ищет сервер.Я создал два сокета, но клиент просто завершил работу в обоих терминалах.