首页 > 其他分享 >构造Socket

构造Socket

时间:2022-11-16 17:32:16浏览次数:86  
标签:java String int 构造 host port Socket


1:Socket的构造函数

​​Socket​​()

​​Socket​​(​​InetAddress​​ address, int port)

​​Socket​​(​​InetAddress​​ address, int port, ​​InetAddress​​ localAddr, int localPort) 
           创建一个套接字并将其连接到指定远程端口上的指定远程地址。

​​Socket​​(​​Proxy​​ proxy) 
          根据不管其他设置如何都应使用的指定代理类型(如果有),创建一个未连接的套接字

​​Socket​​(​​SocketImpl​​ impl)
          创建带有用户指定的 SocketImpl 的未连接 Socket。

​​Socket​​(​​String​​ host, int port)
          创建一个流套接字并将其连接到指定主机上的指定端口号。

​​Socket​​(​​String​​ host, int port, ​​InetAddress​​ localAddr, int localPort)
          创建一个套接字并将其连接到指定远程主机上的指定远程端口。

 

2:类portScanner

import java.io.IOException;
import java.net.Socket;

public class PortScanner {
 
 public static void main(String[] args) {
  String local = "localhost";
  if(args.length > 0) {
   local = args[0];
  }
  new PortScanner().scan(local);
 }
 
 public void scan(String host) {
  Socket socket = null;
  for(int port = 0; port < 1024; port++) {
   try {
    socket = new Socket(host, port);
    System.out.println("There is a server on port" + port);
    
   } catch(IOException e) {
    System.out.println("cannot connect to port" + port);
   } finally {
    try {
     if(socket != null) {
      socket.close();
     }
    } catch(IOException e) {
     e.printStackTrace();
    }
   }
  }
 }
}
PortScanner类能够扫描主机上的从1到1024之间的端口,判断这些端口是否已经被服务器程序监听。

3:类 InetSocketAddress

此类实现 IP 套接字地址(IP 地址 + 端口号)。它还可以是一个对(主机名 + 端口号),在此情况下,将尝试解析主机名。如果解析失败,则该地址将被视为未解析 地址,但是其在某些情形下仍然可以使用,比如通过代理连接。

InetSocketAddress(InetAddress​

          根据 IP 地址和端口号创建套接字地址。

InetSocketAddress(int port)​

          创建套接字地址,其中 IP 地址为通配符地址,端口号为指定值。

InetSocketAddress(String​

          根据主机名和端口号创建套接字地址。

 

4:类ConnectTester

package lee;

import java.io.IOException;
import java.net.BindException;
import java.net.ConnectException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;

public class ConnectTester {

 public static void main(String[] args) {
  //String host = "​​​www.javathinker.org​​​";
  String host = "​​​www.baidu.com​​​";
  int port = 80;
//  if(args.length > 0) {
//   host = args[0];
//   port = Integer.parseInt(args[1]);
//  }
  new ConnectTester().connect(host, port);
 }
 
 public void connect(String host, int port) {
  SocketAddress socketAddress = new InetSocketAddress(host, port);
  Socket socket = null;
  String result = "";
  
  try {
   long begin = System.currentTimeMillis();
   socket = new Socket();
   socket.connect(socketAddress, 2000);   //超时时间为2秒钟
   long end = System.currentTimeMillis();
   result = (end - begin) + "ms";
  } catch(BindException e) {
   result = "Local address and port can't be binded";
  } catch(UnknownHostException e) {
   result = "Unknown host";
  } catch(ConnectException e) {
   result = "Connection refused";
  } catch(SocketTimeoutException e) {
   result = "Time out";
  } catch (IOException e) {
   result = "failure";
  } finally {
   try {
    if(socket != null) {
     socket.close();
    }
   } catch(IOException e) {
    e.printStackTrace();
   }
  }
  System.out.println(socketAddress + ":" + result);
 }
}

 

当Socket构造方法连接服务器时,可能会抛出下面异常:

 *UnknownHostException :如果无法识别主机的名字或者ip地址,会抛出此异常

 * BindException : 如果无法把Socket对象和指定的本地IP地址或者端口绑定,就会抛出此异常

 * ConnectException :如果没有服务器进程监听指定的端口,或者服务器进程拒绝连接,会抛出此异常
 * SocketTimeoutException : 如果等待连接超时,就会抛出此异常

 

标签:java,String,int,构造,host,port,Socket
From: https://blog.51cto.com/woshisap/5856869

相关文章

  • 11月16日内容总结——OSI传输层之TCP与UDP协议、应用层简介、socket模块介绍及代码优
    目录一、传输层之TCP与UDP协议1.TCP协议(重要)三次握手建链接四次挥手断连接2.UDP协议3.tcp和udp的对比二、应用层简介三、socket模块1、简介2、基于文件类型的套接字家族3......
  • socket模块
    目录一、socket模块(套接字)1.socket简介2.代码实现3.代码优化一、socket模块(套接字)​socket上应用层与TCP/IP协议通信中间的软件抽象层,帮助我们编写基于网络进......
  • OSI七层协议之传输层,应用层,socket模块简介,socket模块基本使用,黏包问题
    目录OSI七层协议之传输层,应用层,socket模块简介,socket模块基本使用,黏包问题今日内容概要今日内容详细传输层之TCP与UDP协议应用层socket模块socket代码简介代码优化半连接池......
  • 网络编程2 TCP、UDP协议 与socket模块
    TCP与UDP协议1.TCP协议(重点)"""凡事必须有回复才能继续"""三次握手连接-1.TCP协议也称为可靠协议,数据不容易丢失数据不容易丢失的原因......
  • TCP\UDP协议 socket模块
    目录传输层主要协议TCP协议三次握手TCP协议反馈机制四次挥手洪水攻击UDP协议socket模块socket代码简介socket.socket()server.bind()server.accept()sock.recv()sock.send......
  • socket 模块
    socket模块我们知道基于网络编写程序时,需要使用OSI七层协议里的七层,每一层都要写。很复杂很繁琐。socket模块相当于集成了这一块,封装了复杂的接口提空了简单快捷的接......
  • 传输层之TCP与UDP协议、socket
    目录传输层之TCP与UDP协议应用层socket模块Socket通信socket代码简介代码优化半连接池的概念传输层之TCP与UDP协议TCP与UDP都是用来规定通信方式的ps:不遵循上述协议也......
  • 关于 WebSocket 和 HTTP 区别的思考以及一个最简单的 WebSocket 的客户端和服务器实现
    笔者之前与一位同事研究了Cypress的visit方法,其源码实现最终是调用了WebSocket向visit参数里指定的website通行并获取数据,见下图变量ev.data的值。我这位同......
  • socket模块简介
    今日内容概要传输层只TCP与UDP协议应用层socket模块简介socket模块基本使用代码优化处理半连接池的概念今日内容详细传输层只TCP与UDP协议TCP与UDP都是用来......
  • socket
    目录今日内容概要今日内容详细传输层之TCP与UDP协议应用层socket模块socket代码简介代码优化半连接池的概念今日内容概要传输层之TCP与UDP协议应用层socket模块简介s......