|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- #include <unistd.h>//read()
- #include <stdlib.h>//exit()
- #include <sys/socket.h>//socket()
- #include <string.h>//bzero()内存清0函数
- #include <netinet/in.h>//套接字地址结构, htons()
- #include <arpa/inet.h>//inet_pton()
- #define MAXLINE 4096
- int main(int argc, char *argv[])
- {
- int sockfd, len = 0;//用于存放socket()返回值与读取的字节数
- struct sockaddr_in servaddr;//IP4套接字地址
- char recvline[MAXLINE+1];
- if(argc != 2)
- {
- printf("usage: a.out <IP Address>\n");
- exit(1);
- }
- //向系统注册
- if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)//当出错时的处理
- {
- perror("socket()");
- exit(1);
- }
- //总是把整个结构体初始化为0
- bzero(&servaddr, sizeof(servaddr));
- //设置IP4服务器地址的值
- servaddr.sin_family = AF_INET;//服务器中的sin_family值
- servaddr.sin_port = htons(13);//把端口13转为网络字节序再存放在结构体中
- //把IP地址转化为二进制存放到结构体中
- if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr) == -1)
- {
- perror("inet_pton");
- exit(1);
- }
- //当设置好socket(), 也设置好服务器的套接字时,就要用connect来建立与TCP服务器的连接
- if(connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1)
- {
- perror("connect");
- exit(1);
- }
- //当连接后用read来读取应答,当read()返回0(关闭连接)或负值(出错), 退出循环
- while((len = read(sockfd, recvline, MAXLINE)) > 0)
- {
- recvline[len] = 0;//把最后一个字符标记为NULL, fputs()通常的NULL之前有一个换行符
- if(fputs(recvline, stdout) == EOF)
- {
- printf("fputs()出错!\n");
- exit(1);
- }
- }
- //当结束循环时, 看是不是出错退出的,为负时表明出错
- if(len < 0)
- {
- printf("读取应答出错!\n");
- exit(1);
- }
- exit(0);
- }
复制代码
输入: ./a.out 210.72.145.44
输出: 读取应答出错!
是不是IP地址写错了? 好像PING不了210.72.145.44这个IP啊。。。。求解释,,,
|
|