I can do as follow,and change the java to delphi and C++,but my manager do not agree do that. ============================================= package com.blob.activemq; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; import java.net.Socket; import java.net.URL; import java.net.UnknownHostException;
/* * 客户端 */ public class SoBlob { public static String keywww; public static void main(String[] args) { String oldid="ID:WWW-5DAA99645BA-3700-1494653738046-"; String newid="ID_WWW-5DAA99645BA-4047-1494657860484-"; URL url = null;//createMessageURL(message); try { //http://192.168.2.227:8161/fileserver/ID:WWW-5DAA99645BA-4345-1494661885140-1:1:1:1:1 //url=new URL("http://192.168.2.227:8161/fileserver/"+newid+"1:1:1:1:1"); url=new URL("http://localhost:8161/fileserver/"+newid+"1:1:1:1:1"); } catch (MalformedURLException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } File file = new File("c:\\www.jpg"); FileInputStream fis = null; HttpURLConnection connection = null; try { fis = new FileInputStream(file); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //InputStream fis=new inputstream(file); try { connection = (HttpURLConnection)url.openConnection(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { connection.setRequestMethod("PUT"); } catch (ProtocolException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } connection.setDoOutput(true); // use chunked mode or otherwise URLConnection loads everything into // memory // (chunked mode not supported before JRE 1.5) //connection.setChunkedStreamingMode(transferPolicy.getBufferSize()); connection.setChunkedStreamingMode((int) file.length()); try(OutputStream oss = connection.getOutputStream()) { byte[] buf =new byte[(int) file.length()];//new byte[transferPolicy.getBufferSize()]; for (int c = fis.read(buf); c != -1; c = fis.read(buf)) { oss.write(buf, 0, c); oss.flush(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } /////////////////////////////////////////////////////////// try { //1.创建客户端Socket,指定服务器地址和端口 //Socket socket=new Socket("192.168.2.227", 61616); Socket socket=new Socket("localhost", 61616); //2.获取输出流,向服务器端发送信息 OutputStream os=socket.getOutputStream();//字节输出流 //PrintWriter pw=new PrintWriter(os);//将输出流包装为打印流 //pw.write("用户名:whf;密码:789"); //pw.flush(); //os.write(buffer99, 0, buffer99.length); //os.flush(); So.keywww=newid; int[] BBB={398,101,139,59,85,211,21,21,21,21,11}; ///* String B0="0000018A014163746976654D510000000C01000001780000000D0009436163686553697A650500000400000C4D61784672616D6553697A65067FFFFFFFFFFFFFFF000C4361636865456E61626C656401010004486F737409000D3139322E3136382E322E323237000C50726F76696465724E616D650900084163746976654D51001253697A6550726566697844697361626C6564010000204D6178496E61637469766974794475726174696F6E496E6974616C44656C617906000000000000271000145469676874456E636F64696E67456E61626C656401010011537461636B5472616365456E61626C65640101000F50726F766964657256657273696F6E0000115463704E6F44656C6179456E61626C65640101000F506C6174666F726D44657461696C730900454A564D3A20312E372E305F30312C2032312E312D6230322C204F7261636C6520436F72706F726174696F6E2C204F533A2057696E646F77732058502C20352E312C2078383600154D6178496E61637469766974794475726174696F6E06000000000000753000"; String B1="0000006103027F1800000001000078002949443A5757572D35444141393936343542412D333730302D313439343635333733383034362D313A31002949443A5757572D35444141393936343542412D333730302D313439343635333733383034362D303A3132 "; String B2="0000008705047F7D04000000000200017A002949443A5757572D35444141393936343542412D333730302D313439343635333733383034362D313A31FFFFFFFFFFFFFFFF000100026500374163746976654D512E41647669736F72792E54656D7051756575652C4163746976654D512E41647669736F72792E54656D70546F706963000003E8000000000078 "; String B3="0000003704015E00000003000379002949443A5757572D35444141393936343542412D333730302D313439343635333733383034362D313A31000131 "; String B4="0000005106025F1F0000000400047B002949443A5757572D35444141393936343542412D333730302D313439343635333733383034362D313A3100010001000564000E46696C652E5472616E73706F72740000000064 "; String B5="000000CF1D0648043001001F0000000500040005000600066E00040001000600000000040000015C004E1FF80000002D00000002000946494C452E53495A450600000000000122F8000946494C452E4E414D450900077777772E6A70670006000000000054687474703A2F2F3139322E3136382E322E3232373A383136312F66696C657365727665722F49443A5757572D35444141393936343542412D333730302D313439343635333733383034362D313A313A313A313A3100186170706C69636174696F6E2F6F637465742D73747265616D62"; String B6="000000110C010C000000060004FFFFFFFFFFFFFFFE06"; String B7="000000110C010C000000070003FFFFFFFFFFFFFFFE06"; String B8="000000110C010C000000080001FFFFFFFFFFFFFFFE06"; String B9="000000110C010D000000090000FFFFFFFFFFFFFFFF06"; String B10="000000070B01000000000A00"; // */ //So.keywww="ID:WWW-5DAA99645BA-2748-1494638863984-"; So.keywww=bytes2HexString(So.keywww.getBytes()); System.out.println("B0"); printchar(hexStringToBytes(B0)); byte[] buffer=hexStringToBytes(B0); os.write(buffer, 0, BBB[0]); os.flush(); /* 还有参数的替换问题。 文件名可替换,但文件名长度不能变。是不是队列名一样长度不能变? 且可能只能是英文名,不可中文名? 文件大小的数值或可以不理,如果理,是不是数值的长度也不能变化? 这些小事想起来也会烦人的。 */ System.out.println("B1"); printchar(hexStringToBytes(B1)); byte[] wwwbb1=oldid.getBytes(); String wwwb1=bytes2HexString(wwwbb1); B1=B1.replaceAll(wwwb1, So.keywww); byte[] buffer1=hexStringToBytes(B1); printchar((buffer1)); os.write(buffer1, 0, BBB[1]); os.flush(); System.out.println("B2"); printchar(hexStringToBytes(B2)); B2=B2.replaceAll(wwwb1, So.keywww); byte[] buffer2=hexStringToBytes(B2); printchar((buffer2)); os.write(buffer2, 0, BBB[2]); os.flush(); try { Thread.sleep(1); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("B3"); printchar(hexStringToBytes(B3)); B3=B3.replaceAll(wwwb1, So.keywww); byte[] buffer3=hexStringToBytes(B3); printchar((buffer3)); os.write(buffer3, 0, BBB[3]); os.flush(); System.out.println("B4"); printchar(hexStringToBytes(B4)); B4=B4.replaceAll(wwwb1, So.keywww); byte[] buffer4=hexStringToBytes(B4); printchar((buffer4)); os.write(buffer4, 0, BBB[4]); os.flush(); System.out.println("B5"); printchar(hexStringToBytes(B5)); B5=B5.replaceAll(wwwb1, So.keywww); B5=B5.replaceAll(bytes2HexString("www.jpg".getBytes()), bytes2HexString("qqq.jpg".getBytes())); printchar(hexStringToBytes(B5)); byte[] buffer5=hexStringToBytes(B5); os.write(buffer5, 0, BBB[5]); os.flush(); System.out.println("B6"); printchar(hexStringToBytes(B6)); byte[] buffer6=hexStringToBytes(B6); os.write(buffer6, 0, BBB[6]); os.flush(); System.out.println("B7"); printchar(hexStringToBytes(B7)); byte[] buffer7=hexStringToBytes(B7); os.write(buffer7, 0, BBB[7]); os.flush(); System.out.println("B8"); printchar(hexStringToBytes(B8)); byte[] buffer8=hexStringToBytes(B8); os.write(buffer8, 0, BBB[8]); os.flush(); System.out.println("B9"); printchar(hexStringToBytes(B9)); byte[] buffer9=hexStringToBytes(B9); os.write(buffer9, 0, BBB[9]); os.flush(); System.out.println("B10"); printchar(hexStringToBytes(B10)); byte[] buffer10=hexStringToBytes(B10); os.write(buffer10, 0, BBB[10]); os.flush(); socket.shutdownOutput();//关闭输出流 //3.获取输入流,并读取服务器端的响应信息 InputStream is=socket.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(is)); String info=null; while((info=br.readLine())!=null){ System.out.println("我是客户端,服务器说:"+info); } //4.关闭资源 br.close(); is.close(); //pw.close(); os.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static byte[] hexStringToBytes(String hexString) { if (hexString == null || hexString.equals("")) { return null; } hexString = hexString.toUpperCase(); int length = hexString.length() / 2; char[] hexChars = hexString.toCharArray(); byte[] d = new byte[length]; for (int i = 0; i < length; i++) { int pos = i * 2; d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); } return d; } private static byte charToByte(char c) { return (byte) "0123456789ABCDEF".indexOf(c); } public static byte[] hexStringToByteArray(String s) { int len = s.length(); byte[] data = new byte[len / 2]; try { for (int i = 0; i < len; i += 2) { data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16)); } } catch (Exception e) { //Log.d("", "Argument(s) for hexStringToByteArray(String s)"+ "was not a hex string"); } return data; } public static String bytes2HexString(byte[] b) { String ret = ""; for (int i = 0; i < b.length; i++) { String hex = Integer.toHexString(b[ i ] & 0xFF); if (hex.length() == 1) { hex = '0' + hex; } ret += hex.toUpperCase(); } return ret; } public static void printchar(byte[] www){ String sss=""; for (int ii=0;ii<=www.length-1;ii++){ sss=sss+(char)www[ii];} System.out.println(sss); } } -- View this message in context: http://activemq.2283324.n4.nabble.com/BlobMessage-in-ActiveMQ-CPP-by-now-2017-tp4726457p4726458.html Sent from the ActiveMQ - User mailing list archive at Nabble.com.