У меня небольшая проблема, и я не нахожу никаких решений. У меня есть этот код.
Код сервера
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <pthread.h>
#define PORT 2908
extern int errno;
typedef struct thData{
int idThread;
int cl;
}thData;
static void *treat(void *);
void raspunde(void *);
int main ()
{
struct sockaddr_in server;
struct sockaddr_in from;
int nr;
int sd;
int pid;
pthread_t th[100];
int i=0;
if ((sd = socket (AF_INET, SOCK_STREAM, 0)) == -1)
{
return errno;
}
int on=1;
setsockopt(sd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));
bzero (&server, sizeof (server));
bzero (&from, sizeof (from));
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl (INADDR_ANY);
server.sin_port = htons (PORT);
/
if (bind (sd, (struct sockaddr *) &server, sizeof (struct sockaddr)) == -1)
{
return errno;
}
if (listen (sd, 2) == -1)
{
perror ("[server]Error at listen().\n");
return errno;
}
while (1)
{
int client;
thData * td;
int length = sizeof (from);
fflush (stdout);
if ( (client = accept (sd, (struct sockaddr *) &from, &length)) < 0)
{
perror ("[server]Error at accept().\n");
continue;
}
td=(struct thData*)malloc(sizeof(struct thData));
td->idThread=i++;
td->cl=client;
pthread_create(&th[i], NULL, &treat, td);
}//while
};
static void *treat(void * arg)
{
struct thData tdL;
tdL= *((struct thData*)arg);
printf ("[thread]- %d - Waiting the message...\n", tdL.idThread);
fflush (stdout);
pthread_detach(pthread_self());
raspunde((struct thData*)arg);
close ((intptr_t)arg);
return(NULL);
};
void raspunde(void *arg)
{
int nr, i=0;
struct thData tdL;
tdL= *((struct thData*)arg);
if (read (tdL.cl, &nr,sizeof(int)) <= 0)
{
printf("[Thread %d]\n",tdL.idThread);
perror ("Error at read() from client.\n");
}
printf ("[Thread %d]The message is...%d\n",tdL.idThread, nr);
nr++;
printf("[Thread %d]Sending the message back...%d\n",tdL.idThread, nr);
printf("%d\n",tdL.cl );
if (write (tdL.cl, &nr, sizeof(int)) <= 0)
{
printf("[Thread %d] ",tdL.idThread);
perror ("[Thread]Error at write() from client.\n");
}
else
printf ("[Thread %d]The message was sent.\n",tdL.idThread);
}
Приведенный выше код является сервером, который создает для каждого клиента поток. Клиент отправляет число на сервер, и сервер ответит клиенту с увеличением числа на 1.
Вопрос в том, как мне написать, например, nr из функции ответа или строковое сообщение для все мои клиенты, которые подключены на моем сервере?
Заранее спасибо!