A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丘凤光 金牌黑马   /  2013-4-17 11:42  /  2629 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 丘凤光 于 2013-4-18 10:17 编辑

早上练习TCP传输时,能连接上,运行也出结果,但是获取的ip地址怎么和我的网络ip不一致呢?求解.
运行结果:


代码:
  1. /*
  2. 需求:TCP传输练习,客户端向服务端放松字符,服务端返回其大写
  3. */

  4. import java.io.*;
  5. import java.net.*;
  6. //服务端
  7. class  Server3
  8. {
  9.         public static void main(String[] args) throws Exception
  10.         {
  11.                 ServerSocket ss=new ServerSocket(10000);
  12.                 String ip=ss.getInetAddress().getHostAddress();
  13.                 System.out.println(ip+"——————is connected successfully!");
  14.                 System.out.println(ss.getInetAddress());
  15.                 Socket s=ss.accept();
  16.                 //获取socket的输出流
  17.                 BufferedWriter bwOut=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  18.                 //获取socket的输入流
  19.                 BufferedReader brIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
  20.                 String line=null;
  21.                 while((line=brIn.readLine())!=null)
  22.                 {
  23.                         bwOut.write(line.toUpperCase());
  24.                         bwOut.newLine();
  25.                         bwOut.flush();
  26.                 }
  27.         }
  28. }


  29. //客户端
  30. class  Client3
  31. {
  32.         public static void main(String[] args) throws Exception
  33.         {
  34.                 Socket s=new Socket("192.168.1.106",10000);
  35.                 //键盘录入
  36.                 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  37.                 //获取socket的输出流
  38.                 BufferedWriter bwOut=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  39.                 //获取socket的输入流
  40.                 BufferedReader brIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
  41.                 String line=null;
  42.                 while((line=br.readLine())!=null)
  43.                 {
  44.                         if("over".equals(line))
  45.                                 break;
  46.                         bwOut.write(line);
  47.                         bwOut.newLine();
  48.                         bwOut.flush();
  49.                        
  50.                        
  51.                         System.out.println(brIn.readLine());
  52.                 }
  53.                 //关流、管资源
  54.                 s.close();
  55.                 br.close();
  56.         }
  57. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

9 个回复

倒序浏览
你自己机子上测试,应该用的是同一个IP地址的。你具体说一说Ip的输出是什么样的
回复 使用道具 举报
偏執旳、靑春 发表于 2013-4-17 20:53
你自己机子上测试,应该用的是同一个IP地址的。你具体说一说Ip的输出是什么样的 ...

结果是出来了,你看一下代码和截图。我的问题是为什么获取并打印的IP是0.0.0.0
我代码里配置的是本机IP192.168.1.106,为什么不是显示的本机的IP?我想知道问题出在哪里?
回复 使用道具 举报
丘凤光 发表于 2013-4-17 21:11
结果是出来了,你看一下代码和截图。我的问题是为什么获取并打印的IP是0.0.0.0
我代码里配置的是本机IP19 ...

1.那个客户端里面的IP地址是你本机的IP地址。
2.客户端里面的IP地址本来应该填的是服务器的地址,并不是你自己想配置多少就是多少的.
3.0.0.0.0为windows对所有未知ip的地址描述包括网卡dhcp的取得的地址pppoe的ip及其它非本机指定ip.0.0.0.0是全零网络,代表默认网络
4.你把你的IP地址写成你自己的试试

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
偏執旳、靑春 发表于 2013-4-17 21:39
1.那个客户端里面的IP地址是你本机的IP地址。
2.客户端里面的IP地址本来应该填的是服务器的地址,并不是 ...

如截图,查到的我本机的IP是192.168.1.106。客户端和服务端都是我本机,按理说无论怎么获取IP都因该是192.168.1.106的吧
回复 使用道具 举报
获取ip是服务器端通过获取客户端对象获得的,你搞混了!
  1. //服务端

  2. class  Server3

  3. {

  4.         public static void main(String[] args) throws Exception

  5.         {

  6.                 ServerSocket ss=new ServerSocket(10000);

  7.                 Socket s=ss.accept();
  8.                                 //这里获取ip是通过客户端的socket对象获取的
  9.                                 String ip=s.getInetAddress().getHostAddress();

  10.                 System.out.println(ip+"——————is connected successfully!");

  11.                // System.out.println(ss.getInetAddress());


  12.                 BufferedWriter bwOut=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));


  13.                 BufferedReader brIn=new BufferedReader(new InputStreamReader(s.getInputStream()));

  14.                 String line=null;

  15.                 while((line=brIn.readLine())!=null)

  16.                 {

  17.                         bwOut.write(line.toUpperCase());

  18.                         bwOut.newLine();

  19.                         bwOut.flush();

  20.                 }

  21.         }

  22. }

复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
问题解决了,是我粗心大意了。谢谢
回复 使用道具 举报
黄玉昆 黑马帝 2013-4-18 08:22:19
8#
如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
丘凤光 发表于 2013-4-18 07:44
问题解决了,是我粗心大意了。谢谢

具体原因是什么 说一说?
回复 使用道具 举报
朱德帅说的
//这里获取ip是通过客户端的socket对象获取的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马