使用java
连接到服务器
public static void main(String[] args) throws IOException {try (
Socket socket = new Socket("time-a.nist.gov", 13);
Scanner scanner = new Scanner(socket.getInputStream())
){while (scanner.hasNextLine()) {String line = scanner.nextLine();
System.out.println(line);
}
}
}
设置超时时间
socket.setSoTimeout(10000);
new Socket(host, port)
这个方法会一直地阻塞下去,直到建立了到达主机地初始连接为止。可以通过先构建一个无连接地套接字,然后再使用一个超时来进行拦截地方式解决这个问题。
Socket socket = new Socket();
socket.connect(new InetSocketAddress(host, port), timeout);
静态地getByName
方法可以返回代表某个主机地InetAddress
对象。如:
InetAddress address = InetAddress.getByName("time-a.nist.gov");
String hostAddress = address.getHostAddress();
如果主机名对应多个因特网地址,当访问主机时,随随机选取其中一个,可以通过getAllByName
方法获得所有主机。
InetAddress[] allByName = InetAddress.getAllByName("www.baidu.com");
for (InetAddress inetAddress : allByName) {System.out.println(inetAddress.getHostAddress());
}
获取本机地址
InetAddress localHost = InetAddress.getLocalHost();
System.out.println(localHost.getHostAddress());
服务器套接字一旦启动了服务器程序,它便会等待某个客户端连接到它的接口。
ServerSocket serverSocket = new ServerSocket(8189);
用于建立一个负责监控端口8189的服务器
Socket accept = serverSocket.accept();
一旦有人通过网络发送了正确的连接请求,并以此连接到了端口上,该方法就会返回一个表示连接已经建立的Socket对象。我们可以使用这个对象来得到输入流和输出流。
InputStream inputStream = accept.getInputStream();
OutputStream outputStream = accept.getOutputStream();
服务器发送给服务器输出流的所有信息都会成为哭护短程序的输入,同时来自客户端程序的所有输出都会被包含在服务器输入流中。我们可以将流转换成扫描器和写入器。
Scanner in = new Scanner(inputStream);
PrintWriter out = new PrintWriter(new OutputStreamWriter(outputStream));
完整代码
public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(8189);
Socket accept = serverSocket.accept();
InputStream inputStream = accept.getInputStream();
OutputStream outputStream = accept.getOutputStream();
Scanner in = new Scanner(inputStream);
PrintWriter out = new PrintWriter(new OutputStreamWriter(outputStream), true);
//out.println("ljq");
boolean done = false;
while (!done && in.hasNextLine()) {String line = in.nextLine();
out.println("ljq: " + line);
if (line.trim().equals("no")) done = true;
}
accept.close();
}
半关闭
套接字连接的一端可以终止其输出,同时仍旧可以接收来自另一端的数据。可以通过关闭一个套接字的输出流来表示发送给服务器的请求数据已经结束,但是必须保持输入流处于打开状态。
Socket accept = serverSocket.accept();
accept.shutdownOutput();
获取web
数据URL
和URI
URL
和URLConnection
类封装了大量复杂的实现细节,这些细节涉及如何从远程站点获取信息。
URL url = new URL("urlString");
如果只是想获得该资源的内容,可以使用URL类中的openStream
方法。该方法将产生一个InputStream
对象,然后就可以按照一般的用法来使用这个对象了,如下所示:
URL url = new URL("urlString");
InputStream inputStream = url.openStream();
Scanner scanner = new Scanner(inputStream);
java.net
对URL
(统一资源定位符)和URI
(统一资源标识符)进行了非常有用的区分。
URI
是个纯粹的语法结构,包含用来指定Web
资源的字符串的各种组成部分。URL
是URI
的一个特例,它包含了用于定位Web
资源的足够信息。
在java
中URI
类不能用于访问资源,它的唯一作用就是解析。但是,URL
类可以打开一个连接到资源的流。因此URL
类只能用于那些java
类库知道该如何处理的模式,如http
、https
、ftp
等等。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧