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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴通 中级黑马   /  2012-9-16 14:23  /  1385 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴通 于 2012-9-19 09:39 编辑

在TCP传输协议中,客户端需要创建Socket对象,通过查阅API发现
有一二构造方法Socket(InetAddress address, int port) ,里面需要
接收一个InetAddress类型的参数和int类型的端口,
假如要传输到192.168.0.102    端口为10005上,老师写的是Socket("192.168.0.102",10005)
但是"192.168.0.102"不是一个字符串吗?
我觉得应该Socket(InetAddress.getByName(("192.168.0.102"),10005)
这样才能将它变成InetAddressdx,但是为什么错误啊?

import java.net.*;
import java.io.*;
class TransClient
{
public static void main(String[] args)throws Exception
{
  Socket s=new Socket("192.168.0.102",10005);
  //定义读取键盘数据的流对象
  BufferedReader bufr=
   new BufferedReader(new InputStreamReader(System.in));
  //定义目的,将数据写入到socket输出流,发给服务端
  BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  
  //定义一个Socket读取流,读取服务端返回的大学信息
  BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));

  String line=null;
  while((line=bufr.readLine())!=null)
  {
   if("over".equals(line))
    break;
   bufw.write(line);
   //下面两句一定加上,不然服务端readLine会异常
   bufw.newLine();
   bufw.flush();
   String str=bufIn.readLine();
   System.out.println("server"+str);
  }
  bufr.close();
  s.close();
}
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
本帖最后由 程金 于 2012-9-16 16:10 编辑

Socket(InetAddress.getByName(("192.168.0.102"),10005)
改成Socket(InetAddress.getByName("192.168.0.102"),10005),InetAddress是表示ip地址的对象,他不包含端口.

socket(InetAddress Address,int post)的参数是InetAddress + 端口名两个参数,而ietAddress=InetAddress.getByName(String host).

Socket s=new Socket("192.168.0.102",10005)这是另一种构造方法,参数为主机名+端口,会内部调用InetAddress.getByName()方法转换成ip地址+端口.如果指定的主机名为例如"192.168.0.102",则等效于指定与 InetAddress.getByName("192.168.0.102") 相同的地址

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马