从服务器端传送一张图片到客户端(这里用的是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;
}
// 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;
}
解决方案 »
- JAVA初学者,请问以下程序中特定字符串何时被输出
- 利用多线程求一个整数数组的和?(求最佳线程数)
- 求助:关于对象参数传递的问题
- 如何使JTextArea随着窗体的变化自动调整大小.
- JAVA的一道选择题,请大家帮忙看看~~
- javascript下如何将多个连续相同字符替换成一个字符
- java调用DB2 v8.1存储过程出现错误,帮忙看帖!
- 刚入门,急,寻求数据库开发方面的例子
- 请问大虾在sco unix5.05下,数据库informix,WEB服务用tomcat3.0的JDBC驱动有否?
- oracle中如何用PL/SQL打开一个指定的库,并在屏幕上列出库中的所有表?
- 我没有C语言基础,自学JAVA哪本书好些?
- 求助~~~~~
我也有个程序是JAVA和C连接的
但是我设置的2048大小的缓冲区,实际使用中发现是1380
所以往往造成超过1380的数据被分割了...找资料...无果...
只能把2方的缓冲区都设成1380...
昨天重新发了个帖子
http://community.csdn.net/Expert/topic/5690/5690349.xml?temp=.6771509
标题为"还是Java与VC传输图片的问题(通过SOCKET),望高手指点.!!!!!!!!!!!!!!!!!!!!!!!!"
标题为"还是Java与VC传输图片的问题(通过SOCKET),望高手指点.!!!!!!!!!!!!!!!!!!!!!!!!"好几天没人回,失望............
还是结帖算了.