CÁC BÀI THỰC HÀNH LINUX - Trang 37

- 36-

/* end of line but still some data in buffer => return line */
if(rcv_ptr <n-1) {

/* set last byte to END_LINE */
*(line_to_return+offset)=END_LINE;

rcv_ptr++;
return ++offset;

}

/* end of buffer but line is not ended => */
/* wait for more data to arrive on socket */

if(rcv_ptr == n) {
rcv_ptr = 0;

}

} /* while */
}/*main*/


9.2. Lập trình client /server theo giao thức UDP/IP

Chương trình udpClient.c

/* udpClient.c */

#include <sys/types.h>
#include <sys/socket.h>

#include <netinet/in.h>
#include <arpa/inet.h>

#include <netdb.h>
#include <stdio.h>

#include <unistd.h>
#include <string.h>

/* memset() */

#include <sys/time.h>

/* select() */

#define REMOTE_SERVER_PORT 1500
#define MAX_MSG 100


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

int sd, rc, i;
struct sockaddr_in cliAddr, remoteServAddr;

struct hostent *h;

/* check command line args */
if(argc<3) {

printf("usage : %s <server> <data1> ... <dataN> \n", argv[0]);
exit(1);

}

/* get server IP address (no check if input is IP address or DNS name */
h = gethostbyname(argv[1]);

if(h==NULL) {
printf("%s: unknown host '%s' \n", argv[0], argv[1]);

exit(1);
}