Results 1 to 3 of 3
Thread: ïîìîù çà C êîä
Hybrid View
-
16th March 2011 23:33 #1_
Join Date: Apr:2006
Location: _
Posts: 1,128
ïîìîù çà C êîä
Çäðàâåéòå,
 ìîìåíòà áåç óñïåõ ñå ìú÷à äà îïðàâÿ åäèí áúã â òîçè source code. Èäåÿòà å ïîä ëèíóêñ äà ñå ñúâúðæàò ìíîãî êëèåíòè êúì åäèí ñúðâúð èçïîëçâàéêè Unix Domain Socket. Çà âñåêè êëèåíò ñå èçïîëçâà íîâà íèøêà. Êîäà ñå êîìïèëèðà íî êîãàòî ãî ïóñíà ñëåä ïúðâèÿ ïúò êðàøâà.
Òîâà å ñúðâúðà:
Code:#include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <errno.h> #include <unistd.h> #include <syslog.h> #include <string.h> #include <sys/socket.h> #include <sys/un.h> #include <signal.h> #include <pthread.h> #define NTHREADS 5 void *thread_function(void *); int server_sockfd, client_sockfd; int server_len, client_len; struct sockaddr_un server_address; struct sockaddr_un client_address; void *thread_function(void *dummyPtr){ /* Accept connection. */ client_len = sizeof(client_address); client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len); /* Accept data */ char ch; read(client_sockfd, &ch, 1); ch++; write(client_sockfd, &ch, 1); } int main(void) { /* Our process ID and Session ID */ pid_t pid, sid; /* Fork off the parent process */ pid = fork(); if (pid < 0) { exit(EXIT_FAILURE); } /* If we got a good PID, then we can exit the parent process. */ if (pid > 0) { exit(EXIT_SUCCESS); } /* Change the file mode mask */ umask(0); /* Open any logs here */ /* Create a new SID for the child process */ sid = setsid(); if (sid < 0) { /* Log the failure */ exit(EXIT_FAILURE); } /* Change the current working directory */ if ((chdir("/")) < 0) { /* Log the failure */ exit(EXIT_FAILURE); } /* Close out the standard file descriptors */ close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); /* Daemon-specific initialization goes here */ /* The Big Loop */ while (1) { /* Remove any old socket and create an unnamed socket for the server. */ unlink("/tmp/server_socket"); server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0); /* Name the socket. */ server_address.sun_family = AF_UNIX; strcpy(server_address.sun_path, "/tmp/server_socket"); server_len = sizeof(server_address); bind(server_sockfd, (struct sockaddr *)&server_address, server_len); /* Create a connection queue and wait for clients. */ listen(server_sockfd, 5); signal(SIGCHLD, SIG_IGN); while(1) { /* Create threads */ pthread_t thread_id[NTHREADS]; int i, j; for(i=0; i < NTHREADS; i++) { pthread_create( &thread_id[i], NULL, thread_function, NULL ); } for(j=0; j < NTHREADS; j++) { pthread_join( thread_id[j], NULL); } close(client_sockfd); } } exit(EXIT_SUCCESS); }
êîäà íà êëèåíòà:
âèæäàòå ëè íÿêúäå ãðåøêà?Code:/* Make the necessary includes and set up the variables. */ #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <sys/un.h> #include <unistd.h> #include <stdlib.h> int main() { int sockfd; int len; struct sockaddr_un address; int result; char ch = 'B'; /* Create a socket for the client. */ sockfd = socket(AF_UNIX, SOCK_STREAM, 0); /* Name the socket, as agreed with the server. */ address.sun_family = AF_UNIX; strcpy(address.sun_path, "/tmp/server_socket"); len = sizeof(address); /* Now connect our socket to the server's socket. */ result = connect(sockfd, (struct sockaddr *)&address, len); if(result == -1) { perror("oops: client1"); exit(1); } /* We can now read/write via sockfd. */ write(sockfd, &ch, 1); read(sockfd, &ch, 1); printf("char from server = %c\n", ch); close(sockfd); exit(0); }Last edited by Red_Leader; 17th March 2011 at 21:37.
-
17th March 2011 12:56 #2
Ìèñëÿ, ÷å ïðîñòî ñè ñúáðàë íÿêîëêî ïðèìåðà è ñå íàäÿâàø äà òðúãíå áåç äà ðàçáèðàø êàêâî ïðàâèø.
Äåìîíèçèðàíåòî ... äîáðå òóê íÿìà êàêâî äà ñáúðêàø. Íàòàòúê ðåàëíî ïðàâèø ñëåäíîòî: ïóñêàø 5 íèøêè äà ðàáîòÿò ñ åäèí êëèåíòñêè ñîêåò. Èçëèçàø îò íèøêàòà ñ exit() âìåñòî ñ pthread_exit(). Ìóòåêñà å èçëèøåí àêî âñÿêà íèøêà ñè îáñëóæâà åäèí ñîêåò, à îñâîáîæäàâàíåòî ìó å unreachable êîä.
Ïðàâè ñå òàêà:
ñëåä accept ñå ïóñêà åäíà íèøêà êàòî è ñå ïðåäàâà client_sockfd êàòî ïàðàìåòúð, ñëåä êîåòî ãëàâíàòà íèøêà áëîêâà ïàê íà accept äà ÷àêà íîâè êëèåíòè.Èäèîêðàöèÿòà âå÷å å òóê.
-
17th March 2011 21:39 #3_
Join Date: Apr:2006
Location: _
Posts: 1,128
Íàïðàâèõ ïðîìåíèòå. Ïîíå ðàáîòè.
Êàê ùå ñå íàïðàâè ãëàâíà îòäåëíà íèøêà ñå ñåùàì êàê ùå ñòàíå íî êàê ùå ðàçïðåäåëÿ ðàáîòàòà íà äðóãèòå íèøêè ìè å íåïîíÿòíî êàê ùå ñå ðåàëèçèðà. Íÿìà ëè íÿêîÿ êíèãà êúäåòî å òîâà îïèñàíî ñ ïðèìåð?Last edited by Red_Leader; 17th March 2011 at 21:51.




Reply With Quote
Lenovo ThinkPad 15 èëè IdeaPad 15
5th May 2023, 22:16 in Ìîáèëíè êîìïþòðè