The purpose of this lab is to take the concept of using select() from Lab 3 to create an improved version of vcrec and vcsend from Lab 2 that is capable of full duplex communication. If you did not complete Lab 2, you can use the official solutions as the basis for this lab.
In Lab 2, you created a half-duplex form of both vcrec and vcsend by alternating the code to send data and the code to receive data. So the flow of information was:
vcsend vcrec send() -----> recv() recv() <----- send() send() -----> recv() recv() <----- send()For this lab, you are going to alter those send/receive loops in both vcsend and vcrec to instead use
select()
to determine whether to call
send()
or recv()
. In the setup for
select()
, tell it to monitor both stdin and the data socket for
read activities.
You will call send()
when there is read activity on standard in, which
indicates the user has typed something on the keyboard. If the user has typed
just a period (.) on a line by itself that indicates that the user wishes to
close the connection so you would close instead of calling send()
.
You will call recv()
when there is read activity on the data
socket. If recv()
is successful (returns greater than 0),
print the data to the screen. Otherwise (returns 0 or negative number),
handle as the original vcrec.c handled those return values of
recv()
.
Be sure to prompt the user for input in each iteration of the select()
loop. The prompt can be any text you choose, but be sure to
indicate that the user types '.' on a line by itself to close the connection.
Test your code by running vcrec in one terminal and then running vcsend in a second terminal. You must have two terminals running since both programs will be watching stdin. Have vcsend connect to vcrec's port. You should be able to type in either program whenever you want and have the data display via stdout on the other program. Both programs should terminate when you type '.' on a single line in either program.
Email your new and improved versions of vcsend and vcrec to cs376@cs.csubak.edu