#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<string> #include<sys/types.h> #include<sys/socket.h> #include<arpa/inet.h> #include<netdb.h> #include<netinet/in.h>
#define SERVER_FILE "server_socket"
main(int argc ,char *argv[]) {
int sock, n, server_len;
static struct sockaddr_in server, //地址结构
client;
static char buf[128]; //消息缓冲区
struct hostent *host; if(argc < 3) { fprintf(stderr,"usage: %s server port_#\n",argv[0]); exit(1); } if(!(host = gethostbyname(argv[1]))) { perror("CLIENT gethostname error"); exit(2); } serv_adr.sin_family = AF_INET; memcpy(&server.sin_addr,host->h_addr,host->h_length); server.sin_port = htons(atoi(argv[2])); //拾取一个未被占用的端口
if((sock = socket(AF_INET,SOCK_DGRAM,0)) < 0) { peeror("CLIENT socket error"); exit(3); } client.sin_family = AF_INET; client.sin_addr.s_addr = htonl(INADDR_ANY); client.sin_port = htons(0);
if(bind(sock, (struct sockaddr *)&client,sizeof(client)) < 0) { peeror("CLIENT bind error"); exit(4); }
while(fgets(buf,128,stdin) != NULL)
{
server_len = sizeof(server);
if((sendto(sock,buf,strlen(buf),0,(struct sockaddr *)&server ,&server_len))<0)
{
perror("CLIENT sendto error");
close(sock);
exit(5);
}
memset(buf,0,128); if((n = recvfrom(sock,buf,128,0,(struct sockaddr *)&server,&server_len))<0) { perror("CLIENT recvfrom error"); close(sock); exit(6); } write(fileno(stdout),buf,n); memset(buf,0,128);
} close(sock); exit(0); }
|