소켓통신소스를 검색을 통해 얻어서 사용중입니다.
그런데 값을 보내다 보면 가끔씩 익셉션이 발생합니다.
밑에 보이시는 Log.e("TCP", "C: Error2", e); 로그가 찍히는 곳이 발생하는데
이게 한두번이면 괸찮은데 어쩔때는 연속으로 계속 발생을 하는데 ㅠㅠ
왜 그런지 알수 있을까요??
참고로 저 소스에서 값을 해당 ip로 보내면 이더넷 컨버터로 받아서 AVR128로 받습니다.
저 익셉션이 무엇을 의미 하는지
안하게 뜨게 하려면 어떻게 해야 하는지
구글신님을 계속 검색했지만 도저히 답을 찾을수 없어서 이렇게 질문을 올립니다.
소스는 아래에 첨부했습니다.
package com.mnk.TCPsoketTest;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class TCPsoketTest extends Activity {
/** Called when the activity is first created. */
private String return_msg;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final EditText et = (EditText)findViewById(R.id.EditText01);
Button btn = (Button)findViewById(R.id.Button01);
final TextView tv = (TextView)findViewById(R.id.TextView01);
btn.setOnClickListener(new OnClickListener(){
public void onClick(View v){
if(et.getText().toString() != null || !et.getText().toString().equals("")){
TCPclient tp = new TCPclient(et.getText().toString());
tp.run();
Toast t = Toast.makeText(getApplicationContext(), return_msg, Toast.LENGTH_LONG);
t.show();
tv.setText(return_msg);
}
}
});
}
private class TCPclient implements Runnable {
private static final String serverIP = "xxx.xxx.xxx.xxx"; // ex: 192.168.0.100
private static final int serverPort = xxxx; // ex: 5555
private String msg;
//private String return_msg;
public TCPclient(String _msg){
this.msg = _msg;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
InetAddress serverAddr = InetAddress.getByName(serverIP);
Log.d("TCP", "C: Connecting...");
Socket socket = new Socket(serverAddr, serverPort);
try {
Log.d("TCP", "C: Sending: '" + msg + "'");
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
out.println(msg);
Log.d("TCP", "C: Sent.");
Log.d("TCP", "C: Done.");
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
return_msg = in.readLine();
Log.d("TCP", "C: Server send to me this message -->" + return_msg);
} catch(Exception e) {
Log.e("TCP", "C: Error1", e);
} finally {
socket.close();
}
} catch (Exception e) {
Log.e("TCP", "C: Error2", e);
}
}
}
}
그리고 도움이 되실지 모르겠지만..
쓰레드 생성 방법이 조금 틀린거 같습니다.
TCPclient tp = new TCPclient(et.getText().toString());
tp.run();
요 부분인데요..
Thread를 extends했을때는 .run으로 다이렉트로 실행이 가능하지만..
Runnable을 구현했을 경우에는
위의 코드 기준으로는
TCPclient tp = new TCPclient(et.getText().toString());
Thread th = new Thread(tp);
th.run();
으로..해보세요.




음.. 작동 제대로 하나요...?
일단 작동을 하는 코드라면.. IOException에 대한 처리가 따로 없으세요..
타임아웃이나 통신연결이 약간 불안할때... 에러처리부분.. 만들어주시면 될듯...한데... 다른분 의견은.. 어떠신가요?