Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SERVER
- ##################3
- #include <stdio.h>
- #include <sys/socket.h>
- #include <stdlib.h>
- #include <netinet/in.h>
- #include <string.h>
- #include <unistd.h>
- #define PORT 8083
- #define MAXLEN 255
- #define LISTEN 5
- void die(char *error);
- void handle(int d);
- int main(int argc, char const *argv[]) {
- int res,lis;
- int master_d,slave_d;
- struct sockaddr_in bind_ip_port,client_ip_port;
- int bind_ip_port_length = sizeof(bind_ip_port);
- int client_ip_port_length = sizeof(client_ip_port);
- //FORK - childs
- pid_t pid;
- master_d = socket(AF_INET, SOCK_STREAM, 0);
- if(master_d < 0) {
- die("Could not initialize master socket !\n");
- }
- printf("Socket master initialized !\n");
- //setting vars for socket
- bind_ip_port.sin_family = AF_INET;
- bind_ip_port.sin_addr.s_addr = inet_addr("127.0.0.1");
- bind_ip_port.sin_port = htons(PORT);
- //binding
- res = bind(master_d, (struct sockaddr *)&bind_ip_port, bind_ip_port_length);
- if(res<0){
- die("Could not bind to port \n");
- }
- printf("Bind successfull !\n");
- //listening
- lis = listen(master_d, LISTEN);
- if(lis<0){
- die("Could not listen on socket !\n");
- }
- printf("Listening ....\n");
- while(1){
- slave_d = accept(master_d, (struct addr *)&bind_ip_port, &bind_ip_port_length);
- if(slave_d<0){
- die("Could not accept anything !\n");
- }
- printf("Accepting ...");
- pid = fork(); // clona il processo
- // 3 casi -- > < 0 | = 0 | > 0
- if(pid <0){
- die("Error fork\n");
- }
- printf("Fork ok\n");
- if(pid>0){
- // riservato al padre
- close(slave_d); // chiudiamo il socket slave
- }else{
- close(master_d);
- handle(slave_d);
- close(slave_d);
- exit(0);
- }
- }
- close(master_d);
- return 0;
- }
- void handle(int d) {
- char recvbuff[MAXLEN];
- int sendint;
- // memset(sendbuff, 0, MAXLEN);
- memset(recvbuff, 0, MAXLEN);
- int bytesrecvd = recv(d, recvbuff, MAXLEN, 0);
- if(bytesrecvd <= 0) die("Could not receive ! \n");
- printf("Received %s\n",recvbuff);
- printf("Bytes received ! \n");
- sendint = (int)strlen(recvbuff);
- int sendintx;
- printf("Strlen %d \n",strlen(recvbuff));
- sendintx = htonl(sendint);
- printf("Decoding %d\n",ntohl(sendintx));
- printf("Sending %d\n",sendint);
- int bytesent = send(d, &sendintx, sizeof(sendintx), 0);
- if(bytesent <= 0){
- die("Could not reply to client !\n");
- }
- printf("Replied to client with %d bytes\n",bytesent);
- printf("Coded : %d\n",sendintx);
- }
- void die(char * error){
- fprintf(stderr , "%s.\n", error);
- exit(1);
- }
- #######
- CLIENT
- #########3
- #include <stdio.h>
- #include <sys/socket.h>
- #include <stdlib.h>
- #include <netinet/in.h>
- #include <string.h>
- #include <unistd.h>
- #define PORT 8083
- #define MAXLEN 255
- void die(char *error);
- int main(int argc, char const *argv[])
- {
- int master_d;
- char sendbuff[MAXLEN];
- struct sockaddr_in server_ip_port;
- int server_ip_port_length = sizeof(server_ip_port);
- memset(sendbuff, 0 , MAXLEN);
- master_d = socket(AF_INET, SOCK_STREAM, 0); // socket descriptor
- printf("Masterd %d \n",master_d);
- if(master_d < 0){
- die("Could not connect \n");
- }
- printf("Connected !\n");
- printf("Text to send : %s \n",sendbuff);
- server_ip_port.sin_family = AF_INET;
- server_ip_port.sin_addr.s_addr = inet_addr("127.0.0.1");
- server_ip_port.sin_port = htons(PORT);
- printf("Trying to connect !\n");
- if(connect(master_d, (struct sockaddr *)&server_ip_port, server_ip_port_length)<0){
- die("Could not connect to server !\n");
- }
- printf("Connected to server !\n");
- printf("Inserisci Stringa: ");
- gets(sendbuff);
- int bytesent = send(master_d , sendbuff , sizeof(sendbuff), 0);
- printf("%d bytes sent\n", &bytesent);
- if(bytesent <= 0) {
- die("Could not send any bytes !");
- }
- printf("Bytes sent %d \n",bytesent);
- printf("Sent: %s \n",sendbuff);
- int recvint;
- int bytesrecvd = recv(master_d, &recvint , sizeof(recvint) , 0);
- if(bytesrecvd <= 0) {
- die("Could not receive any bytes");
- }
- printf("Received %d bytes\n", bytesrecvd);
- recvint = ntohl(recvint);
- printf("Received : %d\n",recvint);
- close(master_d);
- return 0;
- }
- void die(char * error){
- fprintf(stderr , "%s.\n", error);
- exit(1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement