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 地址 + 端口号)。它还可以是一个对(主机名 + 端口号),在此情况下,将尝试解析主机名。如果解析失败,则该地址将被视为未解析 地址,但是其在某些情形下仍然可以使用,比如通过代理连接。
根据 IP 地址和端口号创建套接字地址。 |
创建套接字地址,其中 IP 地址为通配符地址,端口号为指定值。 |
根据主机名和端口号创建套接字地址。 |
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