- 论坛徽章:
- 0
|
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/time.h>
#include <time.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <netdb.h>
#include <sys/select.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define MAXLEN 1024
#define NPORT 2000
int main(int argc, char *argv[])
{
int sockfd;
fd_set rset;
struct sockaddr_in friend_addr,local_addr;
char send_buf[MAXLEN];
char recv_buf[MAXLEN];
int n,len;
if(argc != 2)
{
printf("Usage:%s IPadress\n");
return 1;
}
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
bzero(send_buf, sizeof(send_buf));
bzero(recv_buf, sizeof(recv_buf));
bzero(&friend_addr, sizeof(friend_addr));
friend_addr.sin_family = AF_INET;
friend_addr.sin_port = htons (NPORT);
inet_pton(AF_INET, argv[1], &friend_addr.sin_addr);
bzero(&local_addr,sizeof(local_addr));
local_addr.sin_family = AF_INET;
local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
local_addr.sin_port = htons(NPORT);
bind(sockfd, (struct sockaddr *) &local_addr, sizeof(local_addr));
len = sizeof(friend_addr);
FD_ZERO(&rset);
for(;;)
{
FD_SET(sockfd, &rset);
FD_SET(0, &rset);
select(sockfd + 1, &rset, NULL, NULL, NULL);
if(FD_ISSET(0, &rset))
{
printf("Tell %s:", argv[1]);
fgets(send_buf, MAXLEN, stdin);
sendto(sockfd,send_buf, MAXLEN, 0, (struct sockaddr *) &friend_addr, sizeof(friend_addr));
}
if(FD_ISSET(sockfd, &rset))
{ n = recvfrom(sockfd,recv_buf,MAXLEN,0,NULL, NULL);
recv_buf[n] = 0;
printf("recved from %s: %s\n", argv[1], recv_buf);
}
}
}
|
[ 本帖最后由 weiqiboy 于 2008-12-4 16:51 编辑 ] |
|