• java 发送字节流图片,c++接收二进制流


    首先在这里声明一个基础知识:
    1.
    提问:
    java中char占几个字节?C和C++中char占几个字节?
    答:
    C/C++:char始终都是一个字节。
    Java:因为是跨平台的,无论在哪里字符是用Unicode编码的,所以char是两个字节。

    2.
    在Windows和DOS系統中,狹義的文本文件是指擴展名為txt的文件。實際上,那些沒有規定格式的,由可理解的的ASCII以及其他編碼文字組成的文件都是文本文件,如C源程序文件,HTML超文本,XML。除此之外的其他文件都是二進制文件,如Word文件DOC,圖像格式文件JPG。

    Android中拍到的照片一般都是byte[]data的字节流,

        Socket client = null;
        //String serverAddress="192.168.1.2";
        try 
        {
        //创建Socket,连接到服务器
        client = new Socket(serverAddress,9526);  
        OutputStream out =  client.getOutputStream(); 
        out.write(data,0,data.length);
        out.flush();
        out.close();
        client.close();    
        }
        catch (Exception e) 
        {
        // TODO: handle exception
        e.printStackTrace();
       
         }
    通常的处理方式就是上传到服务器上去。之前做的服务器接收程序是java的,
    Socket server = serverSocket.accept();
    System.out.println("accept");
    int length=0;
    byte[] inputByte=new byte[1024];
    //接收客户端发来的图片流
    InputStream is=server.getInputStream();
    FileOutputStream outStream = new FileOutputStream(new File("C:/socket_server/bin/hello.jpg"));//存放拍摄照片的路径
    while((length=is.read(inputByte,0,inputByte.length))>0)
    {
    System.out.println(length);
    outStream.write(inputByte,0,length);//将图片流写入到服务器的一个图像文件中去
    outStream.flush();
    }


    所以,字节流传来的,我字节流读取就ok了,so easy。
    这次遇到的问题是服务器接收程序是用c++写的,那么需要用二进制保存的图片才可以打开!
    SOCKET ss=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,NULL);
    SOCKADDR_IN addr;
    int len;
    addr.sin_family=AF_INET;
    addr.sin_addr.s_addr = htonl(INADDR_ANY);
    addr.sin_port = htons(9526);
    len=sizeof(addr);

    bind(ss , (PSOCKADDR)&addr , len);
    listen(ss,5);

    SOCKET sc=accept(ss,(PSOCKADDR)&addr,&len);
    int length=0;
    ofstream file;

    file.open("file.jpg",ios::binary);

    char buff2[1024];
    int sum=0;
    while((length=recv(sc,buff2,1024,0))>0)
    {
    sum+=length;
    cout<<"length:"<<length<<endl;
    file.write(buff2,length);//把字符串str1全部写到yyy.yyy中
    ZeroMemory(buff2,1024);

    }
    cout<<sum<<endl;
    file.close();
  • 相关阅读:
    方法的重载;数组 (Java Day05)
    switch语句;for/while循环;死循环;跳转语句;嵌套循环;方法及方法的调用(Java Day04)
    运算符;键盘录入;分支结构(Java Day03)
    基础概念学习;常量;变量;编码表;数据类型转换(Java Day02)
    Java语言基本概述;入门案例学习;环境变量的配置;Eclipse安装(Java Day01)
    JVM内存模型
    java多线程对CountDownLatch的使用
    System.nanoTime()的使用
    this用法
    idea取消重复代码提醒的功能
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318431.html
Copyright © 2020-2023  润新知