socket服务端代码,需要提前启动,不然客户端连接时会报异常:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class SocketServer { public static void main(String[] args) throws IOException { serverTest(); } private static void serverTest() throws IOException { ServerSocket server = new ServerSocket(10000); System.out.println("SocketServer : " + server); final Socket socket = server.accept(); StringBuffer sb = new StringBuffer(); new Thread(){ public void run() { //获得客户端发来的数据 try { BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); while(true){ String lineStr = reader.readLine(); System.out.println("Receive from client : " + lineStr); System.out.println("contains ? : " + (lineStr.contains(ImageUtils.endStr))); // if (lineStr.contains(ImageUtils.endStr)) { String readStr = lineStr.substring(0,lineStr.length() - ImageUtils.endStr.length()); sb.append(readStr); System.out.println("--------------------------------------------------" ); System.out.println(sb.toString()); ImageUtils.GenerateImage(sb.toString()); Thread.sleep(5000); //对图片进行处理,处理完成后返回给客户端 System.out.println("---------------- sleep 5 秒后 -------------------" ); PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); printWriter.println("成功连接服务器 -- (服务器发送)"); System.out.println("处理完数据后,服务器返回数据给客户端 "); String readline = in.readLine(); System.out.println(readline); printWriter.println(readline); System.out.println(" server send: " + readline); break; } else if (lineStr.contains(ImageUtils.beginStr)) { String readStr = lineStr.substring(ImageUtils.beginStr.length(),lineStr.length()); sb.append(readStr); } else { sb.append(lineStr); } } } catch (IOException | InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }; }.start(); // new Thread(){ // public void run() { // try { // PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true); // BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); // // printWriter.println("成功连接服务器"+"(服务器发送)"); // System.out.println("成功连接服务器"); // // String readline = in.readLine(); // System.out.println(readline); // while(true){ // printWriter.println(readline); // System.out.println(" server send: " + readline); // readline = in.readLine(); // if("over".equals(readline)) // break; // } // } catch (IOException e) { // e.printStackTrace(); // } // }; // }.start(); } }
socket客户端:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class SocketClient { public static void main(String[] args) throws IOException { clientTest(); } private static void clientTest() throws IOException { final Socket socket = new Socket("192.168.1.113", 10000); //回复服务端 new Thread(){ public void run() { try { PrintWriter out = new PrintWriter(socket.getOutputStream(), true); // BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); // String readline = in.readLine(); // String readline = TestData.getBoxesInfo(); // String readline = "客户端的消息 -- 发送"; String readline = ImageUtils.GetImageStr()+ImageUtils.endStr;; System.out.println(readline); // while(true){ out.println(readline); System.out.println(" client send: " + readline); // readline = in.readLine(); // if(readline.equals("over")) // break; // } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }; }.start(); new Thread(){ public void run() { //获得服务端发来的数据 try { BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); while(true){ System.out.println("Receive from server : " + reader.readLine()); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }; }.start(); } }
ImageUtils类:
import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.io.*; public class ImageUtils { public static String endStr = "deal_bitmap_end"; public static String beginStr = "deal_bitmap_begin"; private static int count = 1000; //图片转化成base64字符串 public static String GetImageStr() {//将图片文件转化为字节数组字符串,并对其进行Base64编码处理 String imgFile = "D:\\imageBase64\\wd.jpg";//待处理的图片 InputStream in = null; byte[] data = null; //读取图片字节数组 try { in = new FileInputStream(imgFile); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } //对字节数组Base64编码 BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(data);//返回Base64编码过的字节数组字符串 } //base64字符串转化成图片 public static boolean GenerateImage(String imgStr) { //对字节数组字符串进行Base64解码并生成图片 if (imgStr == null) //图像数据为空 return false; BASE64Decoder decoder = new BASE64Decoder(); try { //Base64解码 byte[] b = decoder.decodeBuffer(imgStr); for (int i = 0; i < b.length; ++i) { if (b[i] < 0) {//调整异常数据 b[i] += 256; } } //生成jpeg图片 String imgFilePath = "D:\\imageBase64\\new"+(++count)+".jpg";//新生成的图片 OutputStream out = new FileOutputStream(imgFilePath); out.write(b); out.flush(); out.close(); return true; } catch (Exception e) { return false; } } }