android 手机拍照上传项目的开发-----JAVA利用socket传图片给linux服务器
来源:互联网 发布:linux 显存 编辑:程序博客网 时间:2024/05/21 10:43
前段时间写了一篇关于int这些基本数据类型在java和linux-c上传的问题。因为我的目标是做一个android手机拍照上传的项目,服务器是linux-c,所以上传照片是关键的。
但是每次传图片总是大不开,后来用ultraedit看了下里面的16进制数发现前面都对的,就是最后的几行全部都是零。先不说了,代码贴了先。
public boolean send(File file, ProgressBar pb) {byte[] buf = new byte[1024];try {FileInputStream fis = new FileInputStream(file);DataOutputStream dos = new DataOutputStream(s.getOutputStream());int size = fis.available();System.out.println("size=" + size);send(size);int len; while((len = fis.read(buf)) > 0) { dos.write(buf, 0, len); dos.flush(); }} catch (Exception e) {e.printStackTrace();}return true;}这里关于socket连接的代码就不贴了,就贴个socket传图片的代码。因为dos不能关掉,以后还要传东西,为了防止服务器把其他数据也当做是图片收了,我先发了个文件大小size过去,之后用一个循环读一个buf数组传一个。
接下来是服务器端的代码,也只贴接收图片的函数
//接收一个文件,参数是连接ID和保存的路径,以覆盖方式储存,如接收正常返回1,不正常返回-1int receiveFile(int connfd, char* path) {int size, n;n = recv(connfd, &size, sizeof(int), 0);if (n == -1 || n == 0) {perror("接收错误!\n");return -1;}printf("size = %d\n", size);char buffer[1024];bzero(buffer, 1024);int length = 0, receive = 0;int write_length;FILE* fp = fopen(path, "wb");//每次接收1024个字节,直到剩下的字节数不到1024为止while (size >= 1024) {length = recv(connfd, buffer, 1024, 0);if (length <= 0) {printf("Recieve Data Failed!\n");return -1;}write_length = fwrite(buffer, sizeof(char), length, fp);receive += write_length;bzero(buffer, 1024);size -= length;}//不断已剩下字节数为为单位接收,直到全部接收为止while (size > 0) {length = recv(connfd, buffer, size, 0);if (length <= 0) {printf("Recieve Data Failed!\n");pthread_cancel()}write_length = fwrite(buffer, sizeof(char), length, fp);receive += write_length;printf("receive %d/%d bytes\n", write_length, size);size -= length;}fclose(fp);printf("receive file over!\n");return 1;}这里特别要讲的是第二个循环,我前面出现的最后接收到全都是0的问题就在这里。原来我只接收一次,没有重新循环,结果发现你在recv函数里写的size只是个最大的接收量,事实上是不一定的。我测试了很多次发现基本都需要两次才能将剩下的数据接收完,当然,有的时候一次就成功了。所以原来没有这个循环的情况下我将压根没有收好的数组写到了文件里当然就打不开了。
希望我的教训能帮到遇到同样问题的朋友。自学的路是艰难的,贵在坚持啊。
- android 手机拍照上传项目的开发-----JAVA利用socket传图片给linux服务器
- android 手机拍照上传项目的开发-----Camera1.2(图片文件的翻转及缩放操作)
- ionic 的项目实现从手机相册选取图片或拍照并上传至服务器
- Android开发:相册读取、拍照、图片裁剪和图片上传服务器等功能的实现
- android 手机拍照上传项目的开发-----Camera1.0(动态显示预览)
- android手机拍照后上传图片被旋转的问题
- angularjs手机webapp 利用input拍照,图库选择上传图片
- Android 上传图片/头像——取得手机内的图片或拍照取得图片
- 手机拍照,浏览手机的文件夹,上传照片到服务器
- java读取图片属性---判断手机拍照上传的图片是否被翻转
- 手机拍照上传图片问题
- android学习笔记----解决android有的手机拍照后上传图片被旋转的问题
- android 通过webView上传文件给服务器(包括拍照)
- Android调用拍照和本地相册并上传给服务器
- Android:Camera的使用,并处理手机拍照后上传图片被旋转的问题
- 解决android有的手机拍照后上传图片被旋转的问题
- 解决android有的手机拍照后上传图片被旋转的问题 .
- 解决android有的手机拍照后上传图片被旋转的问题
- 黑马程序员笔记——数据库sql杂碎
- 计时器(4)之获取鼠标所在位置的颜色
- C++的string的用法详解
- 二进制中1的个数
- libxml2.dylb 导致<libxml/tree.h> 老是找不到头文件
- android 手机拍照上传项目的开发-----JAVA利用socket传图片给linux服务器
- 编程之美3.1
- 如何把Java源文件转化为可执行文件
- 我为成为一名IT人做的准备
- spring2.5系列之---------三种实例化Bean的方法
- rdlc导出Excel
- Linux命令——cut命令学习
- html框架
- rpm操作