SocketAddress与 InetSocketAddress

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/itkool/article/details/78950128

根据目前的代码

 SocketAddress socketAddress = new InetSocketAddress(ip, port);
            this.socket = new Socket();
            this.socket.connect(socketAddress, getTimeout());
            this.socket.setSoTimeout(getTimeout());
            this.dis = new DataInputStream(this.socket.getInputStream());
            this.dos = new DataOutputStream(this.socket.getOutputStream());

InetAddress是Java对IP地址的封装,代表互联网协议(IP)地址;
InetAddress对象的获取只能通过静态方法,比如根据主机名获取主机的ip地址封装对象:
?

1 InetAddress add=InetAddress.getByName("BOPZKQZ9SSY5ECY");

主机名:BOPZKQZ9SSXXXXX, ip地址:1XX.1XX.2XX.210

InetSocketAddress是SocketAddress的实现子类。
此类实现 IP 套接字地址(IP 地址 + 端口号),不依赖任何协议。
在使用Socket来连接服务器时最简单的方式就是直接使用IP和端口,但Socket类中的connect方法并未提供这种方式,而是使用SocketAddress类来向connect方法传递服务器的IP和端口。
SocketAddress只是个抽象类,它除了有一个默认的构造方法外,其它的方法都是abstract的,因此,我们必须使用SocketAddress的子类来建立SocketAddress对象,也就是唯一的子类InetSocketAddress

二主要功能方法
?
I

netAddress address = InetAddress.getLocalHost();System.out.println("主机名:" + address.getHostName() + ", ip地址:"        + address.getHostAddress());InetAddress add = InetAddress.getByName("BOPZKQZ9SSY5ECY");System.out.println(add.getHostAddress());
final Socket socket = new Socket();
SocketAddress address = new InetSocketAddress("www.fortify.net", 443);
try {    socket.connect(address);} 
catch (IOException e) { 
  // TODO Auto-generated catch block 
     e.printStackTrace();
}// 连接远程主机Thread
   public void run() {       
 try {     
        byte[] buffer = new byte[512];            InputStream stream = socket.getInputStream();            socket.getInputStream().read(buffer);  
              } 
catch (Exception ex) {        
 }   
  }};reader.start();

三两者区别
关键就是InetSocketAddress不基于任何协议,一般用于socket编程中。
?
1 表面看InetSocketAddress多了一个端口号,端口的作用:一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。
?
1 那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。
?
1 实际上是通过“IP地址+端口号”来区分不同的服务的。

socket.connect(socketAddress,timeout ))

08-23

[color=#FF0000]接口中的一个方法:向某个IP服务器下的某port 通过Socket 传入 request字符串,结果服务器处理返回 response字符串rn问题:服务器端是怎么实现的?也就是说他是怎么监听有数据需要处理的s时候进行及时的处理?开始我想到ServerSocket但这是web工程主要怎么来实现呢?rnrn[/color]rn rnrn[code=Java]rnpublic String reuqestTrade(String request, String url, String port,rn String encode) rn String str = "ERROR";rn Socket socket = null;rn OutputStream os;rn InputStream is;rn try rn socket = new Socket(); // 客户端给出IP和端口号rn SocketAddress socketAddress = new InetSocketAddress(url, rn Integer.parseInt(port.trim()));rn socket.connect(socketAddress, Integer.parseInt(Helprn .getUrl("timeout")));rn log.info("socket(客服端未限制端口) 已连接-->" + url + ":" + port);rn is = socket.getInputStream();rn os = socket.getOutputStream();rnrn os.write(request.getBytes());rn os.flush();rnrn byte[] serByte = new byte[2048];rn String serverStr = null;rn int flag = is.read(serByte);rn if (flag != -1) rn serverStr = new String(serByte);rn rn log.info(" answer --> " + serverStr);rn return serverStr;rn catch (UnknownHostException e) rn log.error("systemerr", e);rn str = "ERROR";rn return str;rn catch (IOException e) rn log.error("systemerr", e);rn str = "ERROR";rn return str;rn finally rn if (socket != null) rn try rn socket.close();rn catch (IOException e) rn log.error("systemerr", e);rn str = "ERROR";rn return str;rn rn rn rn rn[/code]

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试