Question: Ok so now I am getting these errors for my modified code I already tried multiple different can you guys try to compile it by

Ok so now I am getting these errors for my modified code I already tried multiple different can you guys try to compile it by doing make tcp to make sure their is no errors

error: 'struct in_addr' has no member named 's'

115 | (ntohl(name.sin_addr.s)

| ^

vcrec.c:119:9: error: expected declaration or statement at end of input

119 | );

| ^

vcrec.c:62:28: warning: unused variable 'k' [-Wunused-variable]

62 | int size, length, ret, k;

| ^

vcrec.c:60:30: warning: unused variable 'caller' [-Wunused-variable]

60 | struct sockaddr_in name, caller;

| ^~~~~~

vcrec.c:59:15: warning: unused variable 'msgsock' [-Wunused-variable]

59 | int sock, msgsock; /* Sockets are integer file descriptors on Linux */

| ^~~~~~~

make: *** [Makefile:7: vcrec] Error 1

Here is my modified version

#include

#include

#include

#include

#include

#include

#include /* for gethostname() */

#include /* for IP address structures and functions */

#define MAX_BUF_SIZE 1024

int main(int argc, char *argv[], char *envp[])

{

int sock, msgsock; /* Sockets are integer file descriptors on Linux */

struct sockaddr_in name, caller;

int size, length, ret, k;

char buf[MAX_BUF_SIZE];

/* Process the command line for the buffer size, if given */

if (argc > 1)

{

size = atoi(argv[1]);

/* Validate that the given argument is between 1 and sizeof(buf) - 1

* Set to the default size if argument is invalid */

if (size < 1 || size > sizeof(buf) - 1)

size = sizeof(buf) - 1;

}

else

{

size = sizeof(buf) - 1; /* Default size */

}

/* Create the listen socket. This is a TCP socket, so use SOCK_STREAM

* Exit if the socket cannot be created */

sock = socket(AF_INET, SOCK_STREAM, 0);

if (sock < 0)

{

perror("receiver: socket() failed. ");

return (-1);

}

/* Bind the socket to an IP address and port. We will use the IP address

* INADDR_ANY, which tells the system to assign the IP address, and the

* port number 0, which tells the system to assign a random port number.

*

* First we have to set the fields in the sockaddr_in object "name" and then

* we can call bind(). Again, exit if bind() fails. */

name.sin_family = AF_INET; /* TCP/IP family */

name.sin_addr.s_addr = INADDR_ANY; /* INADDR_ANY = assigned by system */

name.sin_port = htons(0); /* 0 = assigned by system */

ret = bind(sock,(struct sockaddr *)&name,sizeof name);

if (ret < 0)

{

perror("receiver: bind() failed. ");

return (-1);

}

/* In order to use vcsend to send data to this program, we need to know

* what port number the system just assigned this program. So this segment

* calls getsockname() to update the sockaddr_in object "name" with the

* system assigned values and then print that info to the screen. */

length = sizeof name;

ret = getsockname(sock, (struct sockaddr *)&name, (socklen_t *)&length);

if (ret < 0)

{

perror("receiver: getsockname() failed. ");

return (-1);

}

sleep(1); /* pause for clean screen display */

printf(" receiver: process id: %d ", (int)getpid());

printf(" receiver: IP address: %d.%d.%d.%d",

(ntohl(name.sin_addr.s_addr) & 0xff000000) >> 24,

(ntohl(name.sin_addr.s

Also can you show me both the modified versions of both files and receive but both, thank you

show the modified version of receive someone already showed me the modified version of send

IN

Do select() to decide if you are going to call send() or recv(). when setup for select(), tell it to monitor both stdin and the data socket for read activities

Modify the code to allow full-duplex (simple two-way) communication by having the following interaction between the two programs: vcsend asks the user for a string and sends it to vcrec vcrec echos the received string on screen vcrec asks the user for a string and sends it to vcsend vcsend echos the received string on screen Repeat steps 1-4 until the user enters a period by itself in either vcsend (step 1) or vcrec (step When the user enters a period, close the connection, and exit both vcrec and vcsend

vcrec code:

#include #include #include #include #include #include #include /* for gethostname() */ #include /* for IP address structures and functions */ int main(int argc, char *argv[], char *envp[]) { int sock, msgsock; /* Sockets are integer file descriptors on Linux */ struct sockaddr_in name, caller;

int size, length, ret, k; /* Process the command line for the buffer size, if given */ if (argc > 1) { size = atoi(argv[1]); /* Validate that the given argument is between 1 and sizeof(buf) - 1 * Set to the default size if argument is invalid */ if (size < 1 || size > sizeof(buf) - 1) size = sizeof(buf) - 1; } else { size = sizeof(buf) - 1; /* Default size */ } /* Create the listen socket. This is a TCP socket, so use SOCK_STREAM * Exit if the socket cannot be created */ sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { perror("receiver: socket() failed. "); return (-1); } /* Bind the socket to an IP address and port. We will use the IP address * INADDR_ANY, which tells the system to assign the IP address, and the * port number 0, which tells the system to assign a random port number. * * First we have to set the fields in the sockaddr_in object "name" and then * we can call bind(). Again, exit if bind() fails. */ name.sin_family = AF_INET; /* TCP/IP family */ name.sin_addr.s_addr = INADDR_ANY; /* INADDR_ANY = assigned by system */ name.sin_port = htons(0); /* 0 = assigned by system */ ret = bind(sock,(struct sockaddr *)&name,sizeof name); if (ret < 0) { perror("receiver: bind() failed. "); return (-1); } /* In order to use vcsend to send data to this program, we need to know * what port number the system just assigned this program. So this segment * calls getsockname() to update the sockaddr_in object "name" with the * system assigned values and then print that info to the screen. */ length = sizeof name; ret = getsockname(sock, (struct sockaddr *)&name, (socklen_t *)&length); if (ret < 0) { perror("receiver: getsockname() failed. "); return (-1); } sleep(1); /* pause for clean screen display */ printf(" receiver: process id: %d ", (int)getpid()); printf(" receiver: IP address: %d.%d.%d.%d", (ntohl(name.sin_addr.s_addr) & 0xff000000) >> 24,

(ntohl(name.sin_addr.s_addr) & 0x00ff0000) >> 16, (ntohl(name.sin_addr.s_addr) & 0x0000ff00) >> 8, (ntohl(name.sin_addr.s_addr) & 0x000000ff)); printf(" receiver: port number: %hu", ntohs(name.sin_port)); printf(" "); fflush(stdout); /* Now we will call listen() and wait for a client to connect. The * accept() function will block until there is a client or an error. */ listen(sock,5); /* up to 5 clients can connect. only 1st is accepted */ k = sizeof caller; msgsock = accept(sock, (struct sockaddr *)&caller, (socklen_t *)&k); /* We only reach this point when there is an error or a client. We can * check the value of msgsock (the data socket) to see which has happened */ if (msgsock == -1) { perror("receiver: accept() failed. "); } else { printf(" receiver: Valid connection received. "); printf("receiver: Sending handshake. "); fflush(stdout); /* let vcsend know we are ready by sending a single character */ buf[0]= '0'; send(msgsock, buf, 1, 0); printf("receiver: Waiting for client.... "); do { bzero(buf,sizeof buf); /* zero buffer to remove old data */ /* recv() will block until the client sends information, the client * closes the connection or an error occurs on the data socket. */ ret = recv(msgsock, buf, size, 0); if (ret < 0) { perror("receiver: recv() failed. "); } if (ret == 0) { printf(" received-->sender has ended connection "); } else { printf(" received-->%s ",buf); } } while (ret != 0); /* Exit loop only when client ends connection */ } /* When we exit the recv() loop, the client has ended the connection, so * all that remains is closing the sockets. */ printf("receiver: ending session also and exiting. ");

close(msgsock); /* close data socket */ close(sock); /* close listen socket */ return (0); } /* end of main */

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!