socket传输图片问题
从服务器端传送一张图片到客户端(这里用的是jpg),奇怪的是有时候传送成功,有时候传送失败.我所用的方法是把图片的字节流传过去,可是无论是分批传还是一次性传输(图片大小在80K左右),问题总是存在.
服务器端主要代码 C++
// transfer image start with <IMAGE>
inImage.open((dir+filename+".jpg").c_str(),fstream::binary);
CNetwork::Send(clientSocket,"<IMAGE>\n",strlen("<IMAGE>\n"));
int length; // clientSocket 为客户端套接字
char * buffer;
// get length of file:
inImage.seekg (0, ios::end);
length = inImage.tellg();
inImage.seekg (0, ios::beg);
// allocate memory:
buffer = new char [length];
// read data as a block:
inImage.read(buffer,length);
CNetwork::Send(clientSocket, buffer, length);
inImage.close();
delete [] buffer;
客户端主要代码 Java
server = new Socket(host,port);
// get input stream
InputStream inn = server.getInputStream();
BufferedReader bufIn = new BufferedReader(new InputStreamReader(inn));
// get ouput stream
PrintWriter out = new PrintWriter(server.getOutputStream());
// send the name of the file which we need to server
out.write(filename.toCharArray(),0,filename.length());
out.flush();
String line; //
while ((line = bufIn.readLine()) != null) {
if (line.equals("<FILE>"))
fileTransfer(bufIn);
else if (line.equals("<IMAGE>")){
bufImage = imageTransfer();
break;
}
}
public BufferedImage imageTransfer() throws IOException{
BufferedImage image=null;
// get input stream
ImageInputStream stream = ImageIO.createImageInputStream(
server.getInputStream());//server为连接的socket
image = ImageIO.read(stream);
ImageIO.write(image,"jpg",new File(filename+".jpg"));
return image;
}
服务器端主要代码 C++
// transfer image start with <IMAGE>
inImage.open((dir+filename+".jpg").c_str(),fstream::binary);
CNetwork::Send(clientSocket,"<IMAGE>\n",strlen("<IMAGE>\n"));
int length; // clientSocket 为客户端套接字
char * buffer;
// get length of file:
inImage.seekg (0, ios::end);
length = inImage.tellg();
inImage.seekg (0, ios::beg);
// allocate memory:
buffer = new char [length];
// read data as a block:
inImage.read(buffer,length);
CNetwork::Send(clientSocket, buffer, length);
inImage.close();
delete [] buffer;
客户端主要代码 Java
server = new Socket(host,port);
// get input stream
InputStream inn = server.getInputStream();
BufferedReader bufIn = new BufferedReader(new InputStreamReader(inn));
// get ouput stream
PrintWriter out = new PrintWriter(server.getOutputStream());
// send the name of the file which we need to server
out.write(filename.toCharArray(),0,filename.length());
out.flush();
String line; //
while ((line = bufIn.readLine()) != null) {
if (line.equals("<FILE>"))
fileTransfer(bufIn);
else if (line.equals("<IMAGE>")){
bufImage = imageTransfer();
break;
}
}
public BufferedImage imageTransfer() throws IOException{
BufferedImage image=null;
// get input stream
ImageInputStream stream = ImageIO.createImageInputStream(
server.getInputStream());//server为连接的socket
image = ImageIO.read(stream);
ImageIO.write(image,"jpg",new File(filename+".jpg"));
return image;
}
...全文
相关推荐
基于安卓平台的图片采集与传输系统-实现从本地文件夹或摄像头获取图片并通过socket通信上传至服务器-解决安卓与C平台间大容量图片数据传输问题-包含安卓端图片采集模块socke.zip
卓晴基于安卓平台的图片采集与传输系统_实现从本地文件夹或摄像头获取图片并通过socket通信上传至服务器_解决安卓与C平台间大容量图片数据传输问题_包含安卓端图片采集模块socke.zip基于安卓平台的图片采集与传输系统_实现从本地文件夹或摄像头获取图片并通过socket通信上传至服务器_解决安卓与C平台间大容量图片数据传输问题_包含安卓端图片采集模块socke.zip
socket实现jpg图片的传输
socket实现jpg图片的传输,分为客户端c.cpp和服务器s.cpp,客户端和服务器建立连接后,就可以接收服务器发送的jpg图片。
C# Socket心跳包跟图片传输,TCP/IP协议响应Demo供学习之用
很多人在写Socket的时候会遇到心跳包响应机制跟主线程消息传输机制如何规避而互不影响,本Demo就解决了此问题,而且简单易懂,都有备注,欢迎下载学习之用。
socket传输图片包括服务器客户端
高效socket传输图片源码,解决半包 粘包等问题,也可用于大数据量传输分包等应用
socket传输图片.zip
该Demo为两台手机之间通过socket进行传输图片的例子。


Java SE
