Java网络:套接字

时间:2020-01-09 10:36:14  来源:igfitidea点击:

为了使用Java通过Internet(通过TCP / IP)连接到服务器,我们需要创建一个java.net.Socket并将其连接到服务器。另外,如果我们更喜欢使用Java NIO,则可以使用Java NIO SocketChannel。

创建一个套接字

此代码示例在端口80上连接到IP地址为" 78.46.84.171"的服务器。该服务器恰好是我的Web服务器(www.Hyman.com),而端口80是Web服务器端口。

Socket socket = new Socket("78.46.84.171", 80);

我们也可以使用域名而不是IP地址,如下所示:

Socket socket = new Socket("Hyman.com", 80);

写入套接字

要写入Java套接字,必须获取其OutputStream。这是完成的方式:

Socket socket = new Socket("Hyman.com", 80);
OutputStream out = socket.getOutputStream();

out.write("some data".getBytes());
out.flush();
out.close();

socket.close();

就是这么简单!

当我们确实希望将数据通过Internet发送到服务器时,不要忘记调用flush()。 OS中的基础TCP / IP实现可能会缓冲数据并以更大的块数发送,以适应TCP / IP数据包的大小。

从套接字读取

要从Java套接字读取,我们将需要获取其InputStream。这是完成的方式:

Socket socket = new Socket("Hyman.com", 80);
InputStream in = socket.getInputStream();

int data = in.read();
//... read more data...

in.close();
socket.close();

很简单,对不对?

请记住,我们不能总是像读取文件时那样总是从Socket的InputStream读取直到它返回-1. 原因是仅在服务器关闭连接时返回-1. 但是服务器可能并不总是关闭连接。也许我们想通过同一连接发送多个请求。在那种情况下,关闭连接会很愚蠢。

相反,我们必须知道要从Socket的InputStream中读取多少个字节。这可以通过服务器告知正在发送多少个字节,或者通过查找特殊的数据结尾字符来完成。

关闭socket

使用JavaSocket完成后,必须关闭它以关闭与服务器的连接。这是通过调用Socket.close()方法完成的,如下所示:

Socket socket = new Socket("Hyman.com", 80);

socket.close();