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 =  OutputStream();
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 InputStream();
FileOutputStream outStream = new FileOutputStream(new File("C:/socket_server/bin/hello.jpg"));//存放拍摄照⽚的路径
while((ad(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;java修改html文件
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全部写到中ZeroMemory(buff2,1024);
}
cout<<sum<<endl;
file.close();

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。