最近遇到个问题,两个系统共用用户的头像,用户的头像在一个系统中保存,这就涉及到将图片通过scoket发送给另一个系统存储的问题,最初的思路是将图片读成byte[]数组,然后发送,但又发现,发送图片的同时还要发送密钥、uid、username等信息,好通过对方系统的验证,这就不好弄了,最后想出来,将图片读成字符串、然后模拟http post请求,将图片和密钥、uid等信息发送过去,在服务器端,将得到的byte[]数组写进文件中,最后实验真的成功了,我做了整理和消化,也有不足,请指教,代码如下:
//客户端
public static String readFileAsString(String fileName) throws Exception {
FileInputStream fis = new FileInputStream(fileName);
BufferedInputStream in = new BufferedInputStream(fis);
byte buffer[] = new byte[256];
StringBuffer picStr=new StringBuffer();
BASE64Encoder base64=new BASE64Encoder();
while (in.read(buffer)>= 0){
picStr.append(base64.encode(buffer));//进行64位编码
}
fis.close();
fis=null;
in.close();
in=null;
buffer=null;
return picStr.toString();
}
public static void main(String[] a) {
try {
File file=new File("c:/雪狼突击队.jpg");
//将文件读成字符串
String picString=readFileAsString(file.toString());
//URLEncode
picString="picdata="+URLEncoder.encode(picString, "UTF-8");
String url="http://localhost:8080/Test/index.jsp?uid=1&username=test&auth=098f6bcd4621d373cade4e832627b4f6";
Socket socket =new Socket(InetAddress.getByName(url),80);
DataOutputStream dos=new DataOutputStream(socket.getOutputStream());
String message=""
+"POST "+url+" HTTP/1.1 \r\n "
+"Host: test.lingye.com \r\n "+"Accept: */* \r\n "
+"Cache-Control:no-cache \r\n" +"User-Agent: MSIE6.0; \r\n "
+"Content-Type: application/x-www-form-urlencoded \r\n "
+"Content-Length: "+picString.length()+" \r\n "
+"Connection: Close \r\n\r\n"//报头以两个\n作为结束标志
+picString+"\r\n ";//post数据
byte buffer[]=message.getBytes();
dos.write(buffer);
dos.flush();
dos.close();
//以上只进行了发送操作
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//服务器端
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String picdata=request.getParameter("picdata");
BASE64Decoder base64=new BASE64Decoder();
//64位解码
byte[] buffer=base64.decodeBuffer(picdata);
//写进文件
FileOutputStream fos=new FileOutputStream("c:/雪狼突击队1.jpg");
fos.write(buffer);
fos.flush();
fos.close();
fos=null;
}
代码很粗糙,大家看原理就好了,我试过上传.rar也是可以的
分享到:
相关推荐
基于java socket发送http请求。这种原生的发送请求的方式能适合一些特定场景,比如: A向B发送请求,A不考虑B是否处理成功,即A不关注B的响应结果,那么A就不用阻塞等B的回应。 传统的Httpclient请求方式都是阻塞...
主要介绍了c#使用Socket发送HTTP/HTTPS请求的实现代码,需要的朋友可以参考下
VC Socket GET_POST发送HTTP请求示例#资源达人分享计划#
通过socket发送get请求,从中国天气网获得指定城市的天气。 该例子在ubuntu 14.04和AM3358的嵌入式linux3.14下实际测试可用。 如果需要在嵌入式linux下使用,需要修改Makefile文件的CC和LINK项,指向相应的交叉...
采用JAVA的socket实现http协议,模拟浏览器访问服务端。
Socket类是负责处理客户端通信的Java类。本文主要是介绍java使用Socket类接收和发送数据,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
一个使用C语言socket发送http请求的例子 这是一个linux下使用C的标准socket,进行http访问的例子。通过socket发送get请求,从中国天气网获得指定城市的天气。 该例子在ubuntu 14.04和AM3358的嵌入式linux3.14下实际...
VC Socket GET_POST发送HTTP请求示例
模拟TCP请求或简单的socket请求报文发送工具,免安装绿色版本
在linux环境下,使用socket发送和接收http请求的例子
挺适合新手看的,这是我刚接触c++时写的,新手也很容易看懂
用JAVA实现的文件上传,控制台输入,保存到数据库
php的socket发送post请求示例
jar包直接放进 jmeter安装目录的lib/ext 下即可使用,添加java请求,老铁赶紧下!!!!
0. 准备好一个服务器、一个WiFi模块、一个串口助手 1. 程序打包部署到服务器上运行 2. 实现socket多线程,监听端口1314...4. 使用串口助手发送数据,模拟数据如图“模拟数据.png”所示 爱吃凉拌辣芒果 2022年6月8日
研发者可以用这个工具模拟GET、POST请求,支持添加header。
用Socket实现了发送HTTP请求,源码已经打包了 这些是CHttp里面公开的函数 void SetUrl(char*); //设置网页URL char* GetCookie(); //获取网页cookie void SetCookie(std::string strCookie);//添加cookie std::...
开发环境:VS2013 C语言Socket实现HTTP协议,json格式数据组包 HTTP POST请求向服务器发送json数据
Java Socket 实现SMTP邮件发送,支持SSL/TSL
NULL 博文链接:https://genius.iteye.com/blog/451378