|
还是照着书上抄的一个程序,编译出错已经修改过来了,功能(通过 3387 端口连 接到命令行中指定的主机,然后得到服务器发送的字符串。)没有实现,情大家帮忙看看
[board@board board]$ test1 192.168.0.4
Segmentation fault
[board@board board]$
[code]
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <netdb.h>
#include <netinet/in.h>
#define PORT 3387 /*定义用户连接远程主机的端口*/
#define MAXDATASIZE 100 /*定义可以接受的最大字节数*/
int main(int argc, char *argv[])
{
int sockfd,numbytes;
char buf[MAXDATASIZE];
struct hostent *he;
struct sockaddr_in their_addr; /*定义连接客户信息*/
bzero(&their_addr,sizeof(their_addr));/*置空其他结构*/
their_addr.sin_family=AF_INET; /*本机字节顺序*/
their_addr.sin_port=htons(PORT); /*端口转换成网络字节顺序*/
their_addr.sin_addr=(*(struct in_addr * )he->h_addr);
if(argc!=2)
{
fprintf(stderr,"usage:client hostname\n ");
exit(1);
}
if ((he=gethostbyname(argv[1]))==NULL)
{/*获取主机信息*/
herror("gethostbyname");
exit(1);
}
if ((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket");
exit(1);
}
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("Recived :%s",buf);
close(sockfd);
return 0;
} |
|