(2)使用TCP编写客服端和服务端(上传图片)

(2)使用TCP编写客服端和服务端(上传图片)

此demo的要先启动服务端,否则报错,因为TCP是可靠协议,所以没有对应的服务端时会报错,发送数据为图片

一.编写TCP协议服务端

 1   package demo.soket.tcp;
 2  3   import java.io.FileOutputStream;
 4   import java.io.IOException;
 5   import java.io.InputStream;
 6   import java.net.ServerSocket;
 7   import java.net.Socket;
 8  9   //TCP协议服务端
10   public class Server {
11       public static void main(String[] args) {
12           /**
13            * 1.创建服务端ServerSocket对象
14            * 2.监听socket连接
15            * 3.通过返回的socket对象来获取io流里面的数据
16            * 4.打印数据
17            */
18           //1.
19           ServerSocket server=null;
20           try {
21               server=new ServerSocket(11000);
22               //2.
23               Socket socket=server.accept();
24               //3.
25               InputStream in=socket.getInputStream();
26               FileOutputStream fos=new FileOutputStream("客服端发过来的图片.gif");
27               byte[] b=new byte[1024];
28               int len=0;
29               while((len=in.read(b))!=-1) {
30                   fos.write(b, 0, len);
31               }
32               //写完之后关闭fos与读in
33               fos.close();
34               in.close();
35           } catch (IOException e) {
36               e.printStackTrace();
37           }
38       }
39   }
40

二.编写TCP协议客服端

 1   package demo.soket.tcp;
 2  3   import java.io.FileInputStream;
 4   import java.io.IOException;
 5   import java.io.OutputStream;
 6   import java.net.Socket;
 7   import java.net.UnknownHostException;
 8  9   /**
10    * TCP特点:
11    * 1.建立连接,形成传输数据的通道
12    * 2.在链接中进行大量数据传输
13    * 3.通过三次握完成连接,是可靠协议,所以没有对应的服务端时会报错
14    * 4.必建立连接,效率会稍低些
15    * @author Administrator
16    *
17    */
18   public class Client {
19       public static void main(String[] args) {
20           /**
21            * 1.创建一个客服端的socket对象
22            * 2.建立连接
23            * 3.通过io流在管道里面传输数据
24            * 写数据:输出流 getOutputStream() 
25            * 接收数据:输入流 getInputStream() 
26            * 4.关闭socket
27            */
28           //1.|2.
29           Socket client=null;
30           try {
31               client=new Socket("192.168.95.2",11000);
32               //3.
33               OutputStream os=client.getOutputStream();
34               String path="C:\Users\Administrator\Pictures\Saved Pictures\demo.gif";
35               FileInputStream input=new FileInputStream(path);
36               byte[] b=new byte[1024];
37               int len=0;
38               while((len=input.read(b))!=-1) {
39                   os.write(b, 0, len);
40               }
41                //关闭读文件操作
42               input.close();
43           } catch (UnknownHostException e) {
44               e.printStackTrace();
45           } catch (IOException e) {
46               e.printStackTrace();
47           }finally {
48               //4.
49               if(client!=null) {
50                   try {
51                       client.close();
52                   } catch (IOException e) {
53                       e.printStackTrace();
54                   }
55               }
56           }
57       }
58   }
59 60  

三 .demo运行

刷新项目后会多一张上传的图片

原文地址:https://www.cnblogs.com/KdeS/p/13267543.html