Socket을 사용하여 안드로이드에서 C# 서버로 이미지를 보내려고하는데, 문제가 생깁니다.안드로이드 자바에서 PC의 C# 서버로 이미지를 보내십시오.
package com.example.clientsocket;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView serverMessage;
Thread m_objThreadClient;
Socket clientSocket;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
serverMessage=(TextView)findViewById(R.id.textView1);
}
public void Start(View view)
{
m_objThreadClient=new Thread(new Runnable()
{
public void run()
{
try
{
clientSocket= new Socket("192.168.88.113",2001);
//ObjectOutputStream oos = new ObjectOutputStream(clientSocket.getOutputStream());
File myFile = new File("/storage/sdcard0/Pictures/CameraSample/*.jpg");
InputStream fis = new FileInputStream("/storage/sdcard0/Pictures/CameraSample/*.jpg");
byte [] buffer = new byte[(int)myFile.length()];
fis.read(buffer,0,buffer.length);
OutputStream outputStream = clientSocket.getOutputStream();
outputStream.write(buffer.length);
outputStream.write(buffer,0,buffer.length);
outputStream.flush();
outputStream.close();
clientSocket.close();
//byte [] buffer = new byte[(int)myFile.length()];
// ...
//fis.read(buffer,0,buffer.length);
//OutputStream os = clientSocket.getOutputStream();
//oos.writeObject("37");
//oos.flush();
//oos.writeObject(buffer);
//os.write(37);
//os.write(buffer);
// <- This one.
/*
int temp = 0 ;
while((temp = fis.read(buffer)) != -1)
{
outputStream.write(buffer, 0, temp);
} */
/*
Message serverMessage= Message.obtain();
ObjectInputStream ois =new ObjectInputStream(clientSocket.getInputStream());
String strMessage = (String)ois.readObject();
serverMessage.obj=strMessage;
mHandler.sendMessage(serverMessage);
oos.close();
ois.close();*/
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
m_objThreadClient.start();
}
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg)
{
messageDisplay(msg.obj.toString());
}
};
public void messageDisplay(String servermessage)
{
serverMessage.setText(""+servermessage);
}
}
서버는 내가 보내는 단일 이미지마다 버퍼 길이가 60800이되며이 배열을 사용하여 C#에서 이미지를 만들 수 없습니다. 안드로이드 서버에서 char 배열을받는 것보다 싶습니다. JPG 파일에서 잘못된 작업을하고 있는데, 내 폴더에 이미지 하나만 넣고 싶기 때문입니까?
byte [] buffer = new byte[(int)myFile.length()];
fis.read(buffer,0,buffer.length);
OutputStream outputStream = clientSocket.getOutputStream();
outputStream.write(buffer.length); // You are changing the image here...
outputStream.write(buffer,0,buffer.length);
당신은 소켓에 잘못된 데이터를 전송하고, 이미지가 큰하는 것입니다 경우 메모리가 부족 실행할 수 있습니다