客户端程序
主页 上一层 程序流程 服务器程序 客户端程序

 

#include <stdio.h>

#include <stdlib.h>

#include <errno.h>

#include <string.h>

#include <netdb.h>

#include <sys/types.h>

#include <netinet/in.h>

#include <sys/socket.h>

#define PORT 3490 /* Server的端口 */

#define MAXDATASIZE 100 /*一次可以读的最大字节数 */

 

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

{

int sockfd, numbytes;

char buf[MAXDATASIZE];

struct hostent *he; /* 主机信息 */

struct sockaddr_in their_addr; /* 对方地址信息 */

if (argc != 2) {

fprintf(stderr,"usage: client hostname\n");

exit(1);

}

 

/* get the host info */

if ((he=gethostbyname(argv[1])) == NULL) {

/* 注意:获取DNS信息时,显示出错需要用herror而不是perror */

herror("gethostbyname");

exit(1);

}

if ((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) {

perror("socket");

exit(1);

}

their_addr.sin_family = AF_INET;

their_addr.sin_port = htons(PORT); /* short, NBO */

their_addr.sin_addr = *((struct in_addr *)he->h_addr);

bzero(&(their_addr.sin_zero), 8); /* 其余部分设成0 */

if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) {

perror("connect");

exit(1);

}

if ((numbytes=recv(sockfd,buf,MAXDATASIZE,0))==-1) {

perror("recv");

exit(1);

}

buf[numbytes] = '\0';

printf("Received: %s",buf);

close(sockfd);

return 0;

}