The initial part of the program must include the necessary the use of socket:
# include # include # include
# include
int main (int argc, char * argv []) {
int sockfd;newsockfd int = 0;
; struct sockaddr_in serv_addr, cli_addr;
you create the socket for the server
sockfd = socket (AF_INET, SOCK_STREAM, 0);
if ( sockfd \u0026lt;0) {
perror ("FATAL: Unable to open TCP listener");
exit (1);}
you bind on ' address / port wanted
bzero ((char *) & serv_addr, sizeof (serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr . sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons (0x4bfc)
if (bind (sockfd, (struct sockaddr *) & serv_addr, sizeof (serv_addr)) \u0026lt;0) {
perror ("FATAL: Unable to bind the TCP listener ");
exit (1);}
and listens to
listen (sockfd, 5);
at this point for each new incoming connection is accepted create a specific thread that runs it. E 'must wait to be sure that the new thread has taken over the value of the socket to use for communication.
while (true) {socklen_t
clilen = sizeof (cli_addr)
newsockfd = accept (sockfd, (struct sockaddr *) & cli_addr, & clilen) if
(Newsockfd \u0026lt;0) {perror
("New connection created");
;} else {
pthread_t pth;
; pthread_create (& pth, NULL, InitiateThreadTCP, (void *)newsockfd);
pthread_detach(pTh);
int maxsleep = 1000;
while (newsockfd > 0 && maxsleep > 0) {
usleep (1000);
maxsleep -;
;}}
}
Gestin the function of communication is the Next, remember to define the beginning del file prima del main.
void * InitiateThreadTCP( void *p )
{
int sck = &(int *)p;
char rbuffer[1000];
char sbuffer[1128];
int n = read(sck, rbuffer, 1022);
if (n >= 0) {
rbuffer[n] = 0;
sprintf (sbuffer, "Received message:% s", rbuffer)
write (SCK sbuffer, strlen (sbuffer));}
close (SCK);
pthread_exit (NULL);}
Here is the complete source
# include # include # include
# includes
InitiateThreadTCP void * (void * p)
SCK = & {int (int *) p;
rbuffer char [1000];
sbuffer char [1128];
int n = read (SCK rbuffer, 1022);
if (n> = 0) {
rbuffer [n] = 0;
sprintf (sbuffer, "Received messaggio: %s ", rbuffer);
write(sck, sbuffer, strlen(sbuffer));
}
close(sck);
pthread_exit( NULL );
}
int main(int argc, char *argv[])
{ int sockfd; int newsockfd = 0;
struct sockaddr_in serv_addr, cli_addr; sockfd = socket(AF_INET, SOCK_STREAM, 0);
if ( sockfd < 0 ) {
perror("FATAL: Impossibile aprire il listener TCP");
exit(1);
} bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(0x4bfc);
if ( bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0 ) {
perror("FATAL: Impossibile effettuare il bind del listener TCP");
exit(1);
} listen(sockfd,5); while( true ) {
socklen_t clilen = sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
if (newsockfd \u0026lt;0) {perror
("New connection created");
} else {pthread_t pth;
pthread_create(&pTh, NULL, InitiateThreadTCP, (void *)newsockfd);
pthread_detach(pTh);
int maxsleep = 1000;
while (newsockfd > 0 && maxsleep > 0) {
usleep(1000);
maxsleep--;
}
} }
exit(0);}
0 comments:
Post a Comment