This article will introduce the Socket construction method and Socket related attribute settings and exception handling
Construct Socket
Set the waiting timeout
Set server address
Set client address
Client connects to server Possible exceptions
Socket();Socket(InetAddress address, int port)Socket(InetAddress address, int port, InetAddress localAddr, int localPort)Socket(Proxy proxy)Socket(SocketImpl impl)Socket(String host, int port) Socket(String host, int port, InetAddress localAddr, int localPort)
The following code scans the ports from 1 to 1024 on the host to determine whether these ports have been monitored by the server program.
public class PortScanner { public static void main(String[] args) { String host = "localhost"; new PortScanner().scan(host); } public void scan(String host){ Socket socket = null; for(int i=0;i<1024;i++){ try { socket = new Socket(host, i); System.out.println("There is a server on port "+i); } catch (IOException e) { System.out.println("Can't connect to port "+i); }finally{ if(socket!=null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } } }
Socket socket = new Socket(); SocketAddress endPoint = new InetSocketAddress("localhost", 8000);socket.connect(endPoint, 60000);
SocketTimeoutException.
socket.connect(SocketAddress endpoint, int timeout);Responsible for connecting to the server, the parameter endpoint specifies the server address, and the parameter timeout sets the timeout in milliseconds. If the parameter timeout is 0, it means it will never time out.
Socket(InetAddress address, int port)
Socket(String host, int port)
The InetAddress class represents the IP address of the server. InetAddress provides many static methods:
// 返回本地主机的IP地址 InetAddress.getLocalHost(); // 返回代表10.202.164.65的IP地址 InetAddress.getByName("10.202.164.65"); // 返回域名为'www.csdn.net'的ip地址 InetAddress.getByName("www.csdn.net");
//参数localAddr和localPort用来设置客户端的IP和端口。 Socket(InetAddress address, int port, InetAddress localAddr, int localPort) Socket(String host, int port, InetAddress localAddr, int localPort)
• UnknownHostException: If the name or IP address of the host cannot be recognized, this exception will be thrown
public class ConnectTester { public static void main(String[] args) { String host = "www.csdn.net"; int port = 12312; new ConnectTester().connect(host, port); } public void connect(String host,int port){ SocketAddress remoteAddress = new InetSocketAddress(host, port); Socket socket = null; String result = null; try{ socket = new Socket(); long start = System.currentTimeMillis(); socket.connect(remoteAddress,1000); long end = System.currentTimeMillis(); result = (end-start)+"ms"; }catch(BindException bindException){ result = "BindException,Socket对象与指定的本地IP地址或端口绑定,异常"; }catch (UnknownHostException unknownHostException) { result = "UnknownHostException,无法识别的主机"; }catch (ConnectException connectException) { result = "ConnectException,连接被拒绝"; }catch (SocketTimeoutException socketTimeoutException) { result = "SocketTimeoutException,连接超时"; }catch(IOException e){ result = "IOException,连接失败"; }finally{ if(socket!=null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } System.out.println(remoteAddress+" : "+result); } }
If the name or IP address of the host cannot be recognized, this exception will be thrown. For example: host is: 'somehost11'. The Socket's connect method will throw an UnknownHostException.
• Situations in which ConnectException is thrown:
ConnectException will be thrown in the following two situations.
1) There is no server process listening on the specified port. For example: host is ‘localhost’ and port is 12321. If the local port 12321 is not monitored by any process, the Socket connection method will throw ConnectException.
2) The server process refused the connection. Introduces the situation when the server process rejects the client's connection request. As shown in the following sample code, the second parameter in the construction method of a simple service program ServerSocket represents the length of the request queue. If the queue is full of requests, the server rejects the remaining requests. Throwing ConnectException
public class SimplServer { public static void main(String[] args) throws Exception{ ServerSocket serverSocket = new ServerSocket(8888, 2); Thread.sleep(3600000); } }
public class SimpleClient { public static void main(String[] args) throws Exception{ String host = "localhost"; int port = 8888; Socket s1 = new Socket(host, port); System.out.println("第一次连接成功"); Socket s2 = new Socket(host, port); System.out.println("第二次连接成功"); Socket s3 = new Socket(host, port); System.out.println("第三次连接成功"); } }
If the client connection times out, this exception will be thrown. Modification
socket.connect(remoteAddress, 1);Modified from the original 1000 milliseconds to 1 millisecond, which increases the possibility of timeout.
Modify the code
socket = new Socket();socket.connect(remoteAddress, 1000);
socket = new Socket(); socket.bind(new InetSocketAddress(InetAddress.getByName("222.34.5.6"), 5678)); socket.connect(remoteAddress, 1000);