私はJavaアプリケーションを実行しているサーバーに画像を送信するアンドロイドアプリを作成しています。ここで奇妙な行動:Android携帯からJavaサーバーに画像を送信する(コード作業)
私は
- コンパイル何であるとに画像を送信するために持っているアンドロイド一部を展開し、実行し、コンパイル
- サーバーとして動作する受信部分で、デスクトップ上でJavaアプリケーションを実行しますサーバー。アンドロイドアプリは実行を終了しますが、Javaアプリは終了しません
- イメージを送信するコードを持つアンドロイドアプリアクティビティを実行し、今回はアンドロイドアプリの進捗ダイアログが表示されなくなりますが、Javaアプリは実行を終了しますまた、画像が転送され、正常dが...
後は、Javaアプリの一部を受け取るためのコードです:後
class ProjectServer
{
ServerSocket serSock;
Socket sock;
BufferedReader in;
PrintWriter out;
public static void main(String ar[])
{
try
{
ProjectServer cs=new ProjectServer();
cs.startServer();
}
catch(Exception e)
{
}
}
public void startServer()
{
try
{
serSock=new ServerSocket(8070);
System.out.println("Waiting for client...");
sock=serSock.accept();
System.out.println("Connections done");
//Accept File
System.out.println("Connected");
//receive code
int filesize=450660;
int bytesRead;
int current=0;
// receive file
byte [] mybytearray = new byte [filesize];
InputStream is = sock.getInputStream();
FileOutputStream fos = new FileOutputStream("C:\\Project Server\\Capture.png");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bytesRead = is.read(mybytearray,0,mybytearray.length);
current = bytesRead;
do {
bytesRead =
is.read(mybytearray, current, (mybytearray.length-current));
if(bytesRead >= 0) current += bytesRead;
} while(bytesRead > -1);
bos.write(mybytearray, 0 , current);
bos.flush();
System.out.println("end-start");
}
catch(Exception e)
{
System.out.println(e);
e.printStackTrace();
}
}
}
は、AndroidアプリのSENDパートのコードです:
package com.site.custom;
public class Act2 extends Activity
{
private ProgressDialog pd;
private String serverIP="58.146.100.187";
private BufferedReader in;
private PrintWriter out;
private String path;
private Socket cliSock;
public void onCreate(Bundle onCreateInstance)
{
super.onCreate(onCreateInstance);
setContentView(R.layout.act2);
this.setTitle("This has started");
path=getIntent().getStringExtra("path");
//Establish Connection
try
{
cliSock=new Socket(serverIP,8070);
in=new BufferedReader(new InputStreamReader(cliSock.getInputStream()));
((TextView)findViewById(R.id.tview)).setText(path);
}
catch(Exception e)
{
Log.v("MERA MSG",e.toString());
}
//Send file
ProgressDialog pd=ProgressDialog.show(this, "Sending image", "Image chosen:"+path.substring(path.lastIndexOf("//")+1),false,true);
try
{
File myFile = new File (path);
System.out.println((int)myFile.length());
byte[] mybytearray = new byte[450560];
FileInputStream fis = new FileInputStream(myFile);
BufferedInputStream bis = new BufferedInputStream(fis);
bis.read(mybytearray,0,mybytearray.length);
OutputStream os = cliSock.getOutputStream();
System.out.println("Sending...");
os.write(mybytearray,0,mybytearray.length);
os.flush();
System.out.println("Completed");
pd.dismiss();
System.out.println("Done");
}
catch(Exception e)
{
Log.v("MERA MSG",e.toString());
}
}
}
Holyyy! @ WATTO Studios私はあなたを愛しています!!!!! – GrowinMan
あなたは正しいですが、出力ストリームを強制的に閉じずにフラッシュすることができる方法はありますか?ストリームを閉じるとソケットが閉じて、ここで述べたような問題を引き起こしているからです:http://stackoverflow.com/questions/10163358/socketexception-socket-is-closed-even-when-isconnected-returns- true#comment13038342_10163358 – GrowinMan
上記の答えにいくつかのコードを追加しました。これは、 'close()'が呼び出されても開いたままの 'Socket'を作成できるようにします。お役に立てれば。 – wattostudios