Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <netinet/in.h>
- #include <sys/socket.h>
- #include <sys/types.h>
- #include <arpa/inet.h>
- #include <string.h>
- #include <unistd.h>
- #include <sys/wait.h>
- #include <signal.h>
- void sigchild_handler(int s){
- while(wait(NULL)>0);
- }
- int main(int argc, char *argv[]){
- printf("Nom du programme est: %s\n",argv[0]);
- // ------------
- // Déclarations
- int sock;
- int b;
- int l;
- int s;
- int clientsock;
- int f;
- int ss;
- int r;
- int yes=1;
- struct sockaddr_in server,client;
- socklen_t size;
- size = sizeof(struct sockaddr_in);
- char msg[1000];
- struct sigaction sa;
- // 1: Creation du socket;
- sock = socket(AF_INET, SOCK_STREAM, 0);
- if(sock<0){
- printf("Erreur socket!\n");
- exit(1);
- }
- printf("[+] socket crée.\n");
- // Modification des options de socket;
- ss = setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, &yes, sizeof(int));
- if(ss!=0){
- printf("Errer setsockopt!\n");
- exit(1);
- }
- printf("[+] Option socket établie.\n");
- // 2: Parametrage du server;
- server.sin_family = AF_INET;
- server.sin_port = htons(6000);
- server.sin_addr.s_addr = INADDR_ANY; // inet_addr("0.0.0.0");
- memset(&(server.sin_zero), '\0', 8);
- // Parametrage de structure de signal
- sa.sa_handler = sigchild_handler;
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = SA_RESTART;
- if(sigaction(SIGCHLD, &sa, NULL)==-1){
- printf("Erreur signal!\n");
- exit(1);
- }
- // 3: Bind = socket <=== @ip_port(server)
- b = bind(sock, (struct sockaddr *)&server, size);
- if(b<0){
- printf("Erreur bind!\n");
- exit(1);
- }
- printf("[+] Bind terminé.\n");
- printf("[+] Listening...\n");
- // 4: Listen
- l = listen(sock, 5);
- if(l<0){
- printf("Erreur listen!\n");
- exit(1);
- }
- // 5: fork()
- while(1){
- if( (clientsock = accept(sock, (struct sockaddr *)&client, &size)) < 0){
- printf("Erreur accept!\n");
- continue;
- }
- printf("Cnx recu!\n");
- if(fork()==0){ // p fils crée.
- close(sock);
- char nomclient[100];
- recv(clientsock, nomclient, sizeof(nomclient), 0);
- printf("[+] client %s connecte.\n",nomclient);
- printf("[!] Waiting for message...\n\n");
- while((r=recv(clientsock, msg, sizeof(msg),0))>0){
- printf("[%s]: %s\n",nomclient,msg);
- printf("[SERVER->%s]: ",nomclient);
- scanf("%s",msg);
- if((s=send(clientsock, msg, sizeof(msg),0))<0){
- printf("Erreur lors de l'envoie\n");
- exit(1);
- }
- }
- close(clientsock);
- exit(0);
- }
- close(clientsock);
- } // while
- }
- //---------------------------- client ------------------------
- #include <stdio.h>
- #include <stdlib.h>
- #include <netinet/in.h>
- #include <sys/socket.h>
- #include <sys/types.h>
- #include <arpa/inet.h>
- #include <string.h>
- int main(int argc, char *argv[]){
- // Déclaration
- int sock;
- int c;
- int r;
- int s;
- struct sockaddr_in server;
- char msg[1000];
- // 1: Creation du socket
- sock = socket(AF_INET, SOCK_STREAM, 0);
- if(sock<0){
- printf("Erreur socket!\n");
- exit(1);
- }
- printf("[+] socket crée.\n");
- // 2: Paramétrage du server à connecter
- server.sin_family = AF_INET;
- server.sin_port = htons(6000);
- server.sin_addr.s_addr = inet_addr("127.0.0.1");
- // Ou bien: inet_pton(AF_INET, "127.0.0.1", &(server.sin_addr));
- // 3: Connexion au server
- c = connect(sock, (struct sockaddr *)&server, sizeof(server));
- if(c<0){
- printf("Erreur connect!\n");
- exit(1);
- }
- printf("[+] Connexion établie.\n");
- send(sock, argv[1], sizeof(argv[1]), 0);
- printf("[%s]: ",argv[1]);
- scanf("%s",msg);
- send(sock,msg,sizeof(msg),0);
- printf("[!] Waiting for message...\n\n");
- while((r=recv(sock, msg, sizeof(msg),0))>0){
- printf("[SERVER]: %s\n",msg);
- printf("[%s]",argv[1]);
- scanf("%s",msg);
- if((s=send(sock,msg,sizeof(msg),0))<0){
- printf("Erreur lors de l'envoie\n");
- exit(1);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement