lockdoc
Well-Known Member
Hallo Leute,
ich steh hier grade ein bissel auf dem Schlauch. Ich versuche einen Server zu basteln an denen sich Clients "anmelden" koennen. Der Client soll dann den Server anfragen koennen wer grade alles angemeldet ist. Das prob was ich grade nicht geloest bekomme ist der Server der die client connections in threads schmeisst. Ich weiss dann nicht wie ich in den einzelnen threads nachfragen kann wer grade von den Clients her angemeldet ist.
Main
init_server
accept_client
Ich wuerde also irgendwo gern einen array pflegen in dem die IPs der derzeitigen Clients drin stehen. Und die Function handle_cli_request sollte dann darauf zugreifen koennen. Nur leider hab ich absolut keine Ahnung wie ich das grade umsetzen soll.
Hat Jemand einen Ansatz?
ich steh hier grade ein bissel auf dem Schlauch. Ich versuche einen Server zu basteln an denen sich Clients "anmelden" koennen. Der Client soll dann den Server anfragen koennen wer grade alles angemeldet ist. Das prob was ich grade nicht geloest bekomme ist der Server der die client connections in threads schmeisst. Ich weiss dann nicht wie ich in den einzelnen threads nachfragen kann wer grade von den Clients her angemeldet ist.
Main
PHP:
int main(int argc, char **argv)
{
signal(SIGCHLD, SIG_IGN);
struct sockaddr_in cli_addr;
int sockfd, newsockfd, pid;
int cli_len = sizeof(cli_addr);
pthread_t thread_id;
// bind and let server listen
sockfd = init_server(sockfd);
while (1)
{
// accept a new client
newsockfd = accept_client(sockfd, cli_len, cli_addr);
// Create a worker thread
if (pthread_create(&thread_id, NULL, handle_cli_request, (void *)newsockfd) != 0)
{
handle_error("THREADING FAILED!");
}
}
return 0;
}
init_server
PHP:
int init_server()
{
int sockfd;
struct sockaddr_in serv_addr;
// step 1: create TCP Socket
if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
handle_error("Could not open socket");
// zero out serv_addr
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY; // listen on all addresses
serv_addr.sin_port = htons(SRV_PORT); // htons convert port_num from host_byte_order to network_byte_order
// step 2: bind socket
if ( bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0 )
handle_error("Could not bind Server");
// step 3: listen
listen(sockfd, 5); // 5 is size of connections queue to wait for
return (sockfd);
}
accept_client
PHP:
int accept_client(int fd, int cli_len, struct sockaddr_in cli_addr)
{
int newsockfd = accept(fd,(struct sockaddr *) &cli_addr, &cli_len);
if ( newsockfd < 0 )
handle_error("Client Request not accepted");
return (newsockfd);
}
Ich wuerde also irgendwo gern einen array pflegen in dem die IPs der derzeitigen Clients drin stehen. Und die Function handle_cli_request sollte dann darauf zugreifen koennen. Nur leider hab ich absolut keine Ahnung wie ich das grade umsetzen soll.
Hat Jemand einen Ansatz?
Zuletzt bearbeitet: