socket传输图片问题

whpfish 2007-07-19 02:38:34
从服务器端传送一张图片到客户端(这里用的是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;
}
...全文
583 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
whpfish 2007-08-05
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/5690/5690349.xml?temp=.9994623
标题为"还是Java与VC传输图片的问题(通过SOCKET),望高手指点.!!!!!!!!!!!!!!!!!!!!!!!!"

好几天没人回,失望............
还是结帖算了.
whpfish 2007-08-03
  • 打赏
  • 举报
回复
换了个JDK1.5.0,问题就解决了;编译成applet放到网页上,问题又出现了,郁闷......
昨天重新发了个帖子
http://community.csdn.net/Expert/topic/5690/5690349.xml?temp=.6771509
标题为"还是Java与VC传输图片的问题(通过SOCKET),望高手指点.!!!!!!!!!!!!!!!!!!!!!!!!"
whpfish 2007-08-01
  • 打赏
  • 举报
回复
我java除了刚开始发送文件名过来,就没有再发数据了;所以C++端如果调用RECV,不是会一直阻塞在那吗;还有就是缓冲我原来是默认的,是出现了上述的问题,我才把缓冲改大的,所以应该和缓冲区大小没什么关系.
beiouwolf 2007-07-31
  • 打赏
  • 举报
回复
还有 你的缓冲区太大了
一般都是1024或者2048这样的...
beiouwolf 2007-07-31
  • 打赏
  • 举报
回复
C++的话,你调用了SEND方法后接着调用RECV接收就会把缓冲区的数据刷出去
whpfish 2007-07-27
  • 打赏
  • 举报
回复
不用socket用什么传
DiligencyMan 2007-07-27
  • 打赏
  • 举报
回复
用socket的问题吧!
kulin3422 2007-07-25
  • 打赏
  • 举报
回复
学习
whpfish 2007-07-25
  • 打赏
  • 举报
回复
不懂,发送端是C++直接调用SOCKET API实现的,如何实现flush()的功能,请高手指点.
frilly 2007-07-24
  • 打赏
  • 举报
回复
这么大,发送的时间 flush()试下
whpfish 2007-07-20
  • 打赏
  • 举报
回复
ziji ding
whpfish 2007-07-20
  • 打赏
  • 举报
回复
ding
whpfish 2007-07-20
  • 打赏
  • 举报
回复
我把两边的缓冲区都设成80000多,也就上可以存下整张图片,但是问题还是存在.我在想是不是有可能缓冲区未清空而对下一次传输有影响.
beiouwolf 2007-07-20
  • 打赏
  • 举报
回复
是不是缓冲区大小的关系
我也有个程序是JAVA和C连接的
但是我设置的2048大小的缓冲区,实际使用中发现是1380
所以往往造成超过1380的数据被分割了...

找资料...无果...
只能把2方的缓冲区都设成1380...

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧