鱼C论坛

 找回密码
 立即注册
查看: 4208|回复: 4

书上的第一个TCP/IP编程例子求解

[复制链接]
发表于 2013-7-31 11:12:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. #include <unistd.h>//read()
  3. #include <stdlib.h>//exit()
  4. #include <sys/socket.h>//socket()
  5. #include <string.h>//bzero()内存清0函数
  6. #include <netinet/in.h>//套接字地址结构, htons()
  7. #include <arpa/inet.h>//inet_pton()
  8. #define MAXLINE 4096
  9. int main(int argc, char *argv[])
  10. {
  11.         int sockfd, len = 0;//用于存放socket()返回值与读取的字节数
  12.         struct sockaddr_in servaddr;//IP4套接字地址
  13.         char recvline[MAXLINE+1];

  14.         if(argc != 2)
  15.         {
  16.                 printf("usage: a.out <IP Address>\n");
  17.                 exit(1);
  18.         }

  19.         //向系统注册
  20.         if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)//当出错时的处理
  21.         {
  22.                 perror("socket()");
  23.                 exit(1);
  24.         }
  25.         //总是把整个结构体初始化为0
  26.         bzero(&servaddr, sizeof(servaddr));
  27.         //设置IP4服务器地址的值
  28.         servaddr.sin_family = AF_INET;//服务器中的sin_family值
  29.         servaddr.sin_port = htons(13);//把端口13转为网络字节序再存放在结构体中
  30.         //把IP地址转化为二进制存放到结构体中
  31.         if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr) == -1)
  32.         {
  33.                 perror("inet_pton");
  34.                 exit(1);
  35.         }

  36.         //当设置好socket(), 也设置好服务器的套接字时,就要用connect来建立与TCP服务器的连接

  37.         if(connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1)
  38.         {
  39.                 perror("connect");
  40.                 exit(1);
  41.         }

  42.         //当连接后用read来读取应答,当read()返回0(关闭连接)或负值(出错), 退出循环
  43.         while((len = read(sockfd, recvline, MAXLINE)) > 0)
  44.         {
  45.                 recvline[len] = 0;//把最后一个字符标记为NULL, fputs()通常的NULL之前有一个换行符
  46.                 if(fputs(recvline, stdout) == EOF)
  47.                 {
  48.                         printf("fputs()出错!\n");
  49.                         exit(1);
  50.                 }
  51.         }
  52.         //当结束循环时, 看是不是出错退出的,为负时表明出错
  53.         if(len < 0)
  54.         {
  55.                 printf("读取应答出错!\n");
  56.                 exit(1);
  57.         }
  58.         exit(0);
  59. }
复制代码

输入: ./a.out  210.72.145.44
输出: 读取应答出错!

是不是IP地址写错了? 好像PING不了210.72.145.44这个IP啊。。。。求解释,,,
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-2 14:31:43 | 显示全部楼层
没有人啊。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-2 16:28:53 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-3 06:29:04 | 显示全部楼层
仰望天上的光 发表于 2013-8-2 16:28
把服务器和客户端都放本机上试试,本机IP可用环路IP“127.0.0.1”替代

没返应, 是不是我本机上没有装什么时间服务器???
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-3 09:05:24 | 显示全部楼层
是的。你可以在网上找个现成的服务器和客户端的例子,先运行起来,保证服务器是正确的,然后再按照书上的说法改客户端程序。客户端改好后,再按照书上的说法改服务器的程序。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-16 21:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表