Narzędzia użytkownika

Narzędzia witryny


studia:magisterskie:1sem:systemy_rownolegle_i_rozproszone

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Poprzednia rewizja po obu stronach Poprzednia wersja
Nowa wersja
Poprzednia wersja
studia:magisterskie:1sem:systemy_rownolegle_i_rozproszone [2016/05/19 11:12]
149.156.112.6 [Client C]
studia:magisterskie:1sem:systemy_rownolegle_i_rozproszone [2016/05/19 11:13] (aktualna)
149.156.112.6 [tmp/opencl_mat_transp/mat_transp/mat_transp.c]
Linia 2780: Linia 2780:
  
 }</​code>​ }</​code>​
 +==== Kod wogu ====
 +=== server.c ====
 +<code c>
 +/*
 +    C socket server example, handles multiple clients using threads
 +    Compile
 +    gcc server.c -lpthread -o server
 +*/
 + 
 +#​include<​stdio.h>​
 +#​include<​string.h> ​   //strlen
 +#​include<​stdlib.h> ​   //strlen
 +#​include<​sys/​socket.h>​
 +#​include<​arpa/​inet.h>​ //inet_addr
 +#​include<​unistd.h> ​   //write
 +#​include<​pthread.h>​ //for threading , link with lpthread
 +#include <​unistd.h>​
 + 
 +//the thread function
 +void *connection_handler(void *);
 + 
 +int main(int argc , char *argv[])
 +{
 +    int counter = 0;
 +    pid_t pid = fork();
 +
 +    if (pid == 0)
 +    {
 +       ​  ​   int sock;
 +     struct sockaddr_in server;
 +     char message[1000] , server_reply[2000];​
 +            int counter;
 +     unsigned int ip[] = { 192, 168, 102, 1 };
 +            char* ip_final;
 + char *buf;
 + size_t sz;
 +  
 +     //Create socket
 +
 +            for ( counter = 0; counter < 255; ++counter ) {
 +
 +     sock = socket(AF_INET , SOCK_STREAM , 0);
 +     if (sock == -1)
 +     {
 + printf("​Could not create socket"​);​
 +     }
 +     puts("​Socket created"​);​
 +
 +     //​printf("​192.168.102.%d",​ counter);
 +
 + sz = snprintf(NULL,​ 0, "​192.168.102.%d",​ counter);
 + buf = (char *)malloc(sz + 1); /* make sure you check for != NULL in real code */
 +     ​
 +     server.sin_addr.s_addr = inet_addr(buf);​
 +     server.sin_family = AF_INET;
 +     server.sin_port = htons( 65001 );
 +  
 +     //Connect to remote server
 +     if (connect(sock , (struct sockaddr *)&​server , sizeof(server)) < 0)
 +     {
 + perror("​connect failed. Error"​);​
 + continue;​
 +     }
 +  
 +     puts("​Connected\n"​);​
 +  
 +     //keep communicating with server
 +     while(1)
 +     {
 + //Send some data
 + if( send(sock , "​Werset 6-client"​ , 15 , 0) < 0)
 + {
 +     puts("​Send failed"​);​
 +     return 1;
 + }
 +  
 + //​Receive a reply from the server
 + if( recv(sock , server_reply , 2000 , 0) < 0)
 + {
 +     puts("​recv failed"​);​
 +     break;
 + }
 +
 + puts(server_reply);​
 +
 + break;
 +     }
 +  
 +     close(sock);​
 +           }
 +    }
 +    else if (pid > 0)
 +    {
 +        int socket_desc , client_sock , c;
 +     struct sockaddr_in server , client;
 +      
 +     //Create socket
 +     socket_desc = socket(AF_INET , SOCK_STREAM , 0);
 +     if (socket_desc == -1)
 +     {
 + printf("​Could not create socket"​);​
 +     }
 +     puts("​Socket created"​);​
 +      
 +     //Prepare the sockaddr_in structure
 +     server.sin_family = AF_INET;
 +     server.sin_addr.s_addr = INADDR_ANY;
 +     server.sin_port = htons( 65001 );
 +      
 +     //Bind
 +     if( bind(socket_desc,​(struct sockaddr *)&​server , sizeof(server)) < 0)
 +     {
 + //print the error message
 + perror("​bind failed. Error"​);​
 + return 1;
 +     }
 +     puts("​bind done"​);​
 +      
 +     //Listen
 +     listen(socket_desc , 3);
 +      
 +     //Accept and incoming connection
 +     puts("​Waiting for incoming connections..."​);​
 +     c = sizeof(struct sockaddr_in);​
 +      
 +      
 +     //Accept and incoming connection
 +     puts("​Waiting for incoming connections..."​);​
 +     c = sizeof(struct sockaddr_in);​
 + pthread_t thread_id;
 +
 +     while( (client_sock = accept(socket_desc,​ (struct sockaddr *)&​client,​ (socklen_t*)&​c)) )
 +     {
 + puts("​Connection accepted"​);​
 +  
 + if( pthread_create( &​thread_id , NULL ,  connection_handler , (void*) &​client_sock) < 0)
 + {
 +     perror("​could not create thread"​);​
 +     return 1;
 + }
 +  
 + //Now join the thread , so that we dont terminate before the thread
 + //​pthread_join( thread_id , NULL);
 + puts("​Handler assigned"​);​
 +     }
 +      
 +     if (client_sock < 0)
 +     {
 + perror("​accept failed"​);​
 + return 1;
 +     }
 +    }
 +    else
 +    {
 +        // fork failed
 +        printf("​fork() failed!\n"​);​
 +        return 1;
 +    }
 +     
 +    return 0;
 +}
 + 
 +/*
 + * This will handle connection for each client
 + * */
 +void *connection_handler(void *socket_desc)
 +{
 +    //Get the socket descriptor
 +    int sock = *(int*)socket_desc;​
 +    int read_size;
 +    char *message , client_message[2000];​
 +
 +    //Receive a message from client
 +    while( (read_size = recv(sock , client_message , 2000 , 0)) > 0 )
 +    {
 + printf("​%s\n",​ client_message);​
 +
 + //end of string marker
 + client_message[read_size] = '​\0';​
 +
 + //Send the message back to client
 + write(sock , "​Werset 6" , 8);
 +
 + //clear the message buffer
 + memset(client_message,​ 0, 2000);
 +    }
 +     
 +    if(read_size == 0)
 +    {
 +        puts("​Client disconnected"​);​
 +        fflush(stdout);​
 +    }
 +    else if(read_size == -1)
 +    {
 +        perror("​recv failed"​);​
 +    }
 +         
 +    return 0;
 +}</​code>​
 +=== Makefile ===
 +<code bash># kompilator c
 +CC = gcc
 + 
 +# konsolidator
 +CFLAGS=-g
 +
 +all: server client
 + 
 +server: server.o
 + $(CC) $(LFLAGS) server.o -lpthread -o server
 + 
 +server.o: server.c
 + $(CC) -c server.c -o server.o
 +
 +client: client.o
 + $(CC) client.o -o client
 + 
 +client.o: client.c
 + $(CC) -c client.c -o client.o
 + 
 +clean:
 + rm -f *.o</​code>​
 ===== Zajęcia 9 ===== ===== Zajęcia 9 =====
 <code c>/* <code c>/*
studia/magisterskie/1sem/systemy_rownolegle_i_rozproszone.1463649126.txt.gz · ostatnio zmienione: 2016/05/19 11:12 przez 149.156.112.6