我能想到的最浪漫的Java网络教程之Socket,三步到位!!!

简说

若是要使用Java中的TCP/IP经过网络链接到服务器,则须要建立一个java.net.Socket对象以链接到服务器。若是使用JavaNIO,则还能够在JavaNIO中建立SocketChannel对象。java

第一步建立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只须要调用Socket.close()方法便可,代码以下:操作系统

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

socket.close();

结语

socket其实也就那么回事,写好输入流输出流,就没有什么问题了,若是有想学习编程的同窗能够私信回复 ”学习“ 领取一线大厂Java面试题总结+阿里巴巴泰山手册+各知识点学习思惟导+一份300页pdf文档的Java核心知识点总结!.net

祝同窗们学习进步 !
file

相关文章
相关标签/搜索