@@ -43,7 +43,7 @@ void initMESGB();
4343void initTimeOut ();
4444string convMESGBtostr (MESGB m);
4545
46- /* Child process, receiving XON/XOFF signal from receiver */
46+ // child process
4747void *childProcess (void *threadid);
4848
4949int main (int argc, char *argv[]){
@@ -96,7 +96,7 @@ int main(int argc, char *argv[]){
9696printf (" Menunggu XON...\n " );
9797usleep (200000 );
9898}
99- else { // NAKnum != -1
99+ else { // !xoff or NAKnum != -1
100100if (NAKnum == -1 ) NAKnum = (lastacked + 1 ) % NAKnum;
101101mesg.msgno = NAKnum;
102102mesg.data = cc[NAKnum % RXQSIZE];
@@ -151,6 +151,7 @@ bool corruptACK(char* s){
151151}
152152return checksum != real_c;
153153}
154+
154155void createSocket (char * addr, char * port){
155156// define a client socket
156157serv_addr.sin_family = AF_INET;
@@ -162,11 +163,15 @@ void createSocket(char* addr, char* port){
162163printf (" Membuat socket untuk koneksi ke %s:%d ...\n " , receiverAddress, htons (serv_addr.sin_port ));
163164sockfd = socket (AF_INET, SOCK_DGRAM, 0 );
164165}
166+
167+ // initialize SOH, STX, and ETX value of frame with defined value SOH, STX, dan ETX
165168void initMESGB (){
166169mesg.soh = SOH;
167170mesg.stx = STX;
168171mesg.etx = ETX;
169172}
173+
174+ // initialize timeout value
170175void initTimeOut (){
171176struct timeval tv;
172177tv.tv_sec = 3 ;
@@ -175,6 +180,8 @@ void initTimeOut(){
175180perror (" Error" );
176181}
177182}
183+
184+ // child process, receiving XON/XOFF and ACK/NAK signal from receiver
178185void *childProcess (void *threadid){
179186
180187int now = 0 ;
@@ -195,9 +202,8 @@ void *childProcess(void *threadid){
195202xoff = true ;
196203}
197204else {
198- if (!corruptACK (c_recvfrom)){
199- // dia nerima ACK / NAK
200- if (c_recvfrom[0 ] == ACK){
205+ if (!corruptACK (c_recvfrom)){ // receive ACK/NAK
206+ if (c_recvfrom[0 ] == ACK){ // receive ACK
201207printf (" ACK %d\n " , c_recvfrom[1 ]);
202208lastacked = c_recvfrom[1 ];
203209if (lastacked <= lastsent){
@@ -207,17 +213,19 @@ void *childProcess(void *threadid){
207213countBuf = lastsent + 1 + (RXQSIZE - 1 ) - lastacked;
208214}
209215}
210- else {
216+ else { // receive NAK
211217NAKnum = c_recvfrom[1 ];
212218printf (" NAK %d\n " , NAKnum);
213219}
214220}
215- else {
221+ else { // data corrupted
216222puts (" CORRUPT!!!!" );
217223}
218224}
219225}
220226}
227+
228+ // convert frame to string and add checksum value
221229string convMESGBtostr (MESGB m){
222230string ret = " " ;
223231ret += m.soh ;
0 commit comments