简说
如果要应用 Java 中的 TCP/IP 通过网络连接到服务器,则须要创立一个 java.net.Socket 对象以连贯到服务器。如果应用 JavaNIO,则还能够在 JavaNIO 中创立 SocketChannel 对象。
第一步创立 Socket
以下示例代码连贯到 IP 地址为 89.53.64.191 的服务器上的端口 80。该服务器是 Web 服务器,端口 80 是 Web 服务端口。
Socket socket = new Socket("89.53.64.191", 80);
咱们也能够像如下示例中应用域名代替 IP 地址:
Socket socket = new Socket("wyzhang.com", 80);
第二步 Socket 发送数据
通过 Socket 发送数据,获取 Socket 的输入流(OutputStream),示例代码如下:
Socket socket = new Socket("jenkov.com", 80);
OutputStream out = socket.getOutputStream();
out.write("some data".getBytes());
out.flush();
out.close();
socket.close();
代码非常简单,然而想要通过网络将数据发送到服务器端,肯定不要遗记调用 flush()办法。操作系统底层的 TCP/IP 实现会先将数据放入一个更大的数据缓存块中,而缓存块的大小是与 TCP/IP 的数据包大小相适应的。
第三步 Socket 读取数据
从 Socket 中读取数据,咱们就须要获取 Socket 的输出流(InputStream),代码如下:
Socket socket = new Socket("jenkov.com", 80);
InputStream in = socket.getInputStream();
int data = in.read();
//... read more data...
in.close();
socket.close();
代码也并不简单,但须要留神的是,从 Socket 的输出流中读取数据并不能读取文件那样,始终调用 read()办法直到返回 - 1 为止,因为对 Socket 而言,只有当服务端敞开连贯时,Socket 的输出流才会返回 -1,而是事实上服务器并不会不停地敞开连贯。假如咱们想要通过一个连贯发送多个申请,那么在这种状况下敞开连贯就显得十分愚昧。
因而,从 Socket 的输出流中读取数据时咱们必须要晓得须要读取的字节数,这能够通过让服务器在数据中告知发送了多少字节来实现,也能够采纳在数据开端设置特殊字符标记的形式连实现。
最初敞开 Socket
当应用完 Socket 后咱们必须将 Socket 敞开,断开与服务器之间的连贯。敞开 Socket 只须要调用 Socket.close()办法即可,代码如下:
Socket socket = new Socket("jenkov.com", 80);
socket.close();
结语
socket 其实也就那么回事,写好输出流输入流,就没有什么问题了,如果有想学习编程的同学能够 私信回复”学习“支付一线大厂 Java 面试题总结 + 阿里巴巴泰山手册 + 各知识点学习思维导 + 一份 300 页 pdf 文档的 Java 外围知识点总结!
祝同学们学习提高!