王道Java网络编程实战详解三TCP完结

莫问天涯路几重,轻衫侧帽且从容。这篇文章主要讲述王道Java网络编程实战详解三TCP完结相关的知识,希望能为你提供帮助。
@[toc]
一,前言上篇文章,写了通信协议,服务端与客户端的文本传输原理。
这篇写一下文件的传输原理。
二,文件传输了解了服务端与客户端的文本传输原理,我们继续进阶到文件传输的原理。
我这里写了俩个文件为:
Tcpwen01.java和Tcpwen02.java,分别是服务端与客户端。
我们这里已传输照片为例子。
2.1,Tcpwen02.java客户端这里为了方便直接抛出异常了。
1,首先看到是创建一个socket链接。

Socket socket=new Socket(InetAddress.getByName("127.0.0.1"),9990);

我使用InetAddress类的getByName的方法,开了端口为9990。
,2,创建一个输出流
OutputStream os =socket.getOutputStream();

3,读取文件
我们需要先准备一个照片,我这里直接在java项目文件夹下,所以绝对路径,直接写了文件名。
FileInputStream fis =new FileInputStream(new File("zhu.jpg"));

王道Java网络编程实战详解三TCP完结

文章图片

4,写出文件
写出文件,老套路了,io流。
byte[] buffer = new byte[1024]; int len; while((len=fis.read(buffer))!=-1) os.write(buffer,0,len);

5,通知服务器已经传输完毕
我已经传输完了
socket.shutdownOutput();

6,既然是TCP传输,我们写一个确定,传输的信号,发给服务端,
InputStream InputStream =socket.getInputStream(); ByteArrayOutputStream baos =new ByteArrayOutputStream();

7,老套路,再写一个io输出流。
8,记得关闭资源,保持好习惯。
baos.close(); fis.close(); os.close(); socket.close();

2.2,Tcpwen01.java服务端和上面一样,为了方便直接抛出异常了。
1,老套路,先创建端口
ServerSocket serverSocket =new ServerSocket(9990);

对应上文,创建9990端口。
2,监听客户端链接
Socket socket=serverSocket.accept();

阻塞式监听,会一直等待用户端链接
3,获取输入流
InputStream is =socket.getInputStream();

4,文件输出流。
继续老套路。
王道Java网络编程实战详解三TCP完结

文章图片

输出文件名为zhu111.jpg
5,通知客户端,接受完毕
OutputStream os = socket.getOutputStream(); os.write("可以了".getBytes());

6,记得关闭资源,保持好习惯。
fos.close(); is.close(); socket.close();

三,附源码Tcpwen01.java服务端
package tcp02; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.nio.charset.StandardCharsets; import java.util.Scanner; public class Tcpwen01 public static void main(String[] args) throws IOException //1,创建端口 ServerSocket serverSocket =new ServerSocket(9990); //2,监听客户端链接 Socket socket=serverSocket.accept(); //阻塞式监听,会一直等待用户端链接 //3,获取输入流 InputStream is =socket.getInputStream(); //4,文件输出 FileOutputStream fos =new FileOutputStream(new File("zhu1111.jpg")); byte[] buffer=new byte[1024]; int len; while((len=is.read(buffer))!=-1) fos.write(buffer,0,len); //通知客户端,接受完毕 OutputStream os = socket.getOutputStream(); os.write("可以了".getBytes()); //关闭 fos.close(); is.close(); socket.close();

Tcpwen02.java客户端
package tcp02; import java.io.*; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; public class Tcpwen02 public static void main(String[] args) throws Exception //1,创建一个socket链接 Socket socket=new Socket(InetAddress.getByName("127.0.0.1"),9990); //2,创建一个输出流 OutputStream os =socket.getOutputStream(); //3.读取文件 FileInputStream fis =new FileInputStream(new File("zhu.jpg")); //4,写出文件 byte[] buffer = new byte[1024]; int len; while((len=fis.read(buffer))!=-1) os.write(buffer,0,len); //通知服务器已经传输完毕 //socket.shutdownInput(); //我已经传输完了 socket.shutdownOutput(); //确定 InputStream InputStream =socket.getInputStream(); ByteArrayOutputStream baos =new ByteArrayOutputStream(); byte[] buffer2=new byte[1024]; int len1; while((len1=InputStream.read(buffer2))!=-1) baos.write(buffer,0,len1); System.out.println(baos.toString()); //5,关闭资源 baos.close(); fis.close(); os.close(); socket.close();

四,下集预告_UDP传输【王道Java网络编程实战详解三TCP完结】下集预告_UDP传输原理。
王道Java网络编程实战详解三TCP完结

文章图片


    推荐阅读