Java实现Tcp的文字与图片传输
客户端
- 连接服务器socket
- 发送消息
服务器
- 建立服务的端口 ServerSocket
- 等待用户的连接 accept
- 接受用户的消息
文字传输
-
服务器
package com.davis.lesson02; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class TcpServerDemo01 { public static void main(String[] args) { ServerSocket serverSocket=null; Socket socket=null; InputStream is=null; ByteArrayOutputStream baos=null; try { //服务器需要一个地址 serverSocket=new ServerSocket(9999); //等待客户端连接 socket=serverSocket.accept(); //读取消息 is=socket.getInputStream(); //管道流 baos=new ByteArrayOutputStream(); byte[] buffer=new byte[1024]; int len; while((len=is.read(buffer))!=-1){ baos.write(buffer,0,len); } System.out.println(baos.toString()); } catch (IOException e) { e.printStackTrace(); }finally { //关闭资源 if(baos!=null){ try { baos.close(); } catch (IOException e) { e.printStackTrace(); } } if(is!=null){ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } if(socket!=null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } if(serverSocket!=null){ try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
-
用户
package com.davis.lesson02; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; import java.net.UnknownHostException; public class TcpClientDemo01 { public static void main(String[] args) { Socket socket=null; OutputStream os=null; //要知道服务器的地址,端口号 try { InetAddress serverIP=InetAddress.getByName("127.0.0.1"); int port=9999; //创建一个socket连接 socket=new Socket(serverIP,port); //发送消息,io流 os=socket.getOutputStream(); os.write("你好".getBytes()); } catch (Exception e) { e.printStackTrace(); }finally { if(os!=null){try { os.close(); } catch (IOException e) { e.printStackTrace(); } if(socket!=null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } } }
图片传输
-
服务器
package com.davis.lesson02; import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class TcpServerDemo02 { public static void main(String[] args) throws IOException { ServerSocket serverSocket=new ServerSocket(9000); Socket socket=serverSocket.accept(); InputStream is=socket.getInputStream(); //文件输出 FileOutputStream fos=new FileOutputStream(new File("receive.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(); serverSocket.close(); } }
-
客户端
package com.davis.lesson02; import java.io.*; import java.net.InetAddress; import java.net.Socket; public class TcpClientDemo02 { public static void main(String[] args) throws Exception{ Socket socket=new Socket(InetAddress.getByName("127.0.0.1"),9000); OutputStream os=socket.getOutputStream(); FileInputStream fis=new FileInputStream(new File("C20-18.jpg")); //写出文件 byte[] buffer=new byte[1024]; int len; while((len=fis.read(buffer))!=-1){ os.write(buffer,0,len); } //通知服务器已经结束了 socket.shutdownOutput(); //确定服务器接收完毕才能断开 InputStream inputStream=socket.getInputStream(); //String byte[] ByteArrayOutputStream baos=new ByteArrayOutputStream(); byte[]buffer2=new byte[1024]; int len2; while((len=inputStream.read(buffer2))!=-1){ baos.write(buffer2,0,len); } System.out.println(baos.toString()); baos.close(); inputStream.close(); fis.close(); os.close(); socket.close(); } }