第四章 网络
连接到服务器
套接字超时
对于不同的应用应该确定合理的超时值,然后调用setSoTimeout方法。这个超时值会作用于该套接字的所有读写办法。
Socket s = new Socket(...);
s.setSoTimeout(10000);
套接字的构造也会有一个超时问题,因此可以先新建一个无连接的套接字,然后再使用一个超时的连接。
Socket s = new Socket();
s.connect(new InetSocketAddress(host, port), timeout)
实现服务器
每一个服务器都会不断循环以下过程:
- 通过输入数据流从客户端接收一个命令。
- 解码这个客户端命令。
- 收集客户端所请求的信息。
- 通过输出数据流,发送消息给客户端。
半关闭
套接字连接的一端可以终止其输出,同时仍旧可以接收来自另一端的数据。
可中断套接字
SocketChannel类可以提供中断套接字操作的方法。
获取Web数
URL和URI
统一资源定位符URL是统一资源标识符URI的一个特例,它包含了用于定位Web资源的足够信息。那些根据标识符无法定位任何数据的URI也被称为统一资源名称URN。
提交表单数据
GET命令的参数规则
- 保留字符A到Z,a到z,0到9以及.-~_。
- 用+替换所有的空格。
- 将其他所有字符编码为UTF-8,并将每个字节都编码为%后紧跟一个十六进制的数字,即用UTF-8编码表示其他符号。