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();