www.pudn.com > vxWorks_Lab.rar > unixClient.c


/* unixClient.c - simple UDP demo client */ 
 
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
 
 
 
#define MAX_MSG_LEN 80 
typedef int SOCK_FD; 
 
void error (char * str); 
 
int main  
	( 
	int argc, 
	char * argv [] 
	) 
	{ 
	short port; /* Server's port number */ 
	int inetAddr; /* Server's IP address */ 
	struct sockaddr_in srvAddr; /* Server address */ 
	int val; /* Value to send the server */ 
	SOCK_FD sockFd; /* Client's socket */ 
	char replyBuf[MAX_MSG_LEN]; /* Space for reply */ 
 
 
	/* 
	 * Get the server port number, inet address, and 
	 * value to send 
	 */ 
	if (argc != 4) 
		{ 
		fprintf (stderr, "Usage: %s portNumber " 
					"inetAddress value\n", argv[0]); 
		exit (1); 
		} 
	port = (short)atoi(argv[1]); 
	inetAddr = inet_addr(argv[2]); 
	val = atoi(argv[3]); 
 
 
	/* Create a socket */ 
	if ( (sockFd = socket (PF_INET, SOCK_DGRAM, 
			IPPROTO_UDP)) < 0) 
		error ("socket failed"); 
 
	/* Initialize servers address */ 
	memset ((char *)&srvAddr, 0, sizeof(srvAddr)); 
	srvAddr.sin_family = AF_INET; 
	srvAddr.sin_port = htons(port); 
	srvAddr.sin_addr.s_addr = inetAddr; 
 
	/* Send the server the value */ 
 
	if (sendto (sockFd, (char *)&val, sizeof(val), 0, 
			(struct sockaddr * ) &srvAddr, 
			 sizeof(srvAddr)) < 0) 
		{ 
		close (sockFd); 
		error ("sendto failed"); 
		} 
 
	/*  
	 * Read and then print the server's reply. 
	 * (We should await the reply with select(), but 
	 * instead are lazy here. The client could block 
	 * forever in the read() call.) 
	 */ 
	 
	if (read (sockFd, replyBuf, MAX_MSG_LEN) < 0) 
		{ 
		close (sockFd); 
		error ("read failed"); 
		} 
	printf ("\n%s\n", replyBuf); 
 
	/* Close socket */ 
	close (sockFd); 
	return 0; 
	} 
 
 
void error (char * str) 
	{ 
	perror (str); 
	exit (1); 
	}