若是要使用Java中的TCP/IP经过网络链接到服务器,则须要建立一个java.net.Socket对象以链接到服务器。若是使用JavaNIO,则还能够在JavaNIO中建立SocketChannel对象。java
如下示例代码链接到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的输出流(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的输入流(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核心知识点总结!.net
祝同窗们学习进步 !