소켓통신으로 계산기 구현하고 있습니다.
먼저 server(Android) 부분에서 익셉션이 발생해서 ,thread를 실해하지 못하고 있는거 같습니다.
왜 그런지 좀 도와주세요 그리고, thread에서 TextView 를 사용하려면 Handler를 사용해야 된다고 해서 책보고 한다고 했는데 이해가 잘 안되서 제대로 된 것인지 잘 모르겠네요 이부분도 좀 봐주셨으면 감사하겠습니다.  이거한다고 거의 5일째 밤새고 있습니다.ㅠㅠ
== Server 메인부분입니다====

public class CalculClient extends Activity {
    /** Called when the activity is first created. */
 
 ServerSocket serverSocket = null;
 Socket socket = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        TextView tv = (TextView)findViewById(R.id.getData);
        final TextView tv2 = (TextView)findViewById(R.id.result);
        
        try{
         serverSocket = new ServerSocket(5777);
         
         ServerThread thread = new ServerThread(); 
            thread.start();
           
            Handler mHandler = new Handler(){
          public void handleMessage(Message msg){
           if(msg.what == 0){
            tv2.setText((CharSequence) msg.obj);
           }
          }
         };
        }
        catch(Exception e){
        }
        finally{
         try{
          serverSocket.close();
         }catch(Exception ignored){;}
        }
        
}
 
}

그리고 server Thread 부분입니다.

public class ServerThread extends Thread {
  ServerSocket serverSokcet = null;
  Socket socket = null;
  BufferedReader br = null;
  BufferedWriter bw = null;
  Handler mHandler;
  
  public ServerThread() {
   // TODO Auto-generated constructor stub
   try{
    br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
   }
   catch(IOException ioe){
    
   }
  }
  ServerThread(Handler handler){
   mHandler = handler;
  }
  
  public void run(){
   String packet="";
   while(true){
    try{
     socket = serverSokcet.accept();
     packet = br.readLine();
     if(packet != null){
      
      Message msg = Message.obtain();
      msg.what =0;
      msg.obj = packet;
      mHandler.sendMessage(msg);
      
      String result = analPacket(packet);
      bw.write(result);
      bw.newLine();
      bw.flush();
     }
    }
    catch(IOException ioe){
     try{
      br.close();
      bw.close();
      socket.close();
     }catch(IOException ex){
      
     }
     break;
    }
   }
  }
 public String analPacket(String str){
  StringTokenizer st = new StringTokenizer(str,":");
  String operator ="";
  int x,y,result=0;
  String packet = "";
  boolean success =true;
  
  operator = st.nextToken().toString();
  try{
   x=Integer.parseInt(st.nextToken().trim());
   y=Integer.parseInt(st.nextToken().trim());
   
   if(operator.equals("+")){
    result = x+y;
   }else if(operator.equals("-")){
    result = x-y;
   }else if(operator.equals("*")){
    result = x*y;
   }else if(operator.equals("/")){
    if(y != 0){
     result = x/y;
    }else{
     packet="you can't devide zero";
     success = false;
    }
   }else{
    packet = "It's error";
    success = false;
   }
   if(success){
    packet = "receive data " + result + ":";
   }
  }
  catch(NumberFormatException e){
   packet = "it's not integer";
  }
  return packet;
  }
 
 }

client 부분(PC) 코드도 같이 올립니다.

public class Calculator {
 public static void main(String args[]) {
  String del[]={"+","-","*","/"};
  String op="";
  int op_count=0;
  String ip="xxx.xxx.xxx.xxx";
  int port=5777;
  String str="";
  BufferedReader console=new BufferedReader(new InputStreamReader(System.in));
  boolean conti=true;
  int x,y;
  CalculClient c=new CalculClient();
  
  if (args.length>0) {
   try {
    port=Integer.parseInt(args[0]);
   } catch (NumberFormatException e) { }
   if (args.length>1) ip=args[1];
  }
  
  try {
   c.socket_connect(ip, port);
  } catch (IOException e) {
   System.out.println("\nCan not find Calculator Server.");
   System.out.println("usage: java Calculator [port] [server IP]");
   System.exit(-1);
  }
  
  while (conti) {
   try {
    System.out.print("\n수식 또는 bye를 입력하세요:");
    str=console.readLine();
   } catch (IOException e) { }
   
   if (str.equals("bye")) {  break; }
   
   op_count=0;
   
   for (int i=0; i<4; i++) {
    if (str.indexOf(del[i])>0) {
     op_count++;
     op=del[i];
    }
   }
   
   if (op_count!=1) {
    System.out.println("+,-,*,/ 중 하나의 연산자를 사용하세요");
   } else {
    
    StringTokenizer st=new StringTokenizer(str, op);
    
    try {
     
     x=Integer.parseInt(st.nextToken());
     y=Integer.parseInt(st.nextToken());
     
     try {
      c.calcul(x,y,op);
     } catch (IOException e) {
      System.out.println("데이터 전송에 실패했습니다.");
     }
     
     if (c.isSuccess()) {
      System.out.println("계산 결과:"+c.getResult());
     } else {
      System.out.println("에러:"+c.getError());
     }
     
    } catch (NumberFormatException e) {
     System.out.println("정수만 입력하세요.");
    }
    
    
   }
   
  }  
  
 }
}
 
import java.io.*;
import java.net.*;
import java.util.*;
public class CalculClient {
 private int result=0;     // 결과값이 전송됩니다.
 private String error="";    // 에러메시지가 들어갑니다.
 private boolean success=false;  // 계산이 성공했으면 true값으로
 String ip="xxx.xxx.xxx.xxx";
 int port=5777;
 Socket socket=null;
 BufferedReader br=null;
 BufferedWriter bw=null;
 
 public CalculClient() {
  ip="xxx.xxx.xxx.xxx";
  port=5777;
 }
 
 public CalculClient(String ip, int port) {
  this.ip=ip;
  this.port=port;
 }
 public int getResult() {
  return result;
 }
 
 public String getError() {
  return error;
 }
 
 public boolean isSuccess() {
  return success;
 }
 // Connect Socket in default ip and port
 public void socket_connect() throws IOException {
  try {
   socket_connect(ip, port);
  } catch (IOException e) {
   throw e;
  }
 }
 
 // Connect Socket in given IP and port
 public void socket_connect(String ip, int port) throws IOException {
  try {
   socket=new Socket(ip, port);
   br=new BufferedReader(new InputStreamReader( socket.getInputStream() ) );
   bw=new BufferedWriter(new OutputStreamWriter( socket.getOutputStream() ) );
  } catch (IOException e) {
   success=false;
   error="Error in Socket Connection";
   throw e;
  }
 }
 
 // Close the socket
 public void socket_close() throws IOException {
  try {
   br.close();
   bw.close();
   socket.close();
  } catch (IOException e) {
   success=false;
   error="Error in Socket Closing";
   throw e;
  }
 }
 // Calculate given statement
 public void calcul(int x, int y, String opp) throws IOException {
  
  String packet="";
  String receivedPacket="";
  
  try {
   packet=opp+":"+x+":"+y+":";
   
   bw.write(packet);
   bw.newLine();
   bw.flush();
   
   receivedPacket=br.readLine();
   StringTokenizer st=new StringTokenizer(receivedPacket, ":");
   String tmp=st.nextElement().toString();
   
   if (tmp.equals("s")) {
    result=Integer.parseInt( st.nextToken().trim() );
    success=true;
   } else {
    error=st.nextToken().toString();
    success=false;
   }  
   
  } catch (IOException e) {
   success=false;
   error="Error in Data Transmission";
   throw e;
  }
 }
 
 // This Method for Testing
 public static void main(String args[]) {
  CalculClient c=new CalculClient();
  int port=5777;
  String ip="xxx.xxx.xxx.xxx";
  
  if (args.length>0) {
   try {
    port=Integer.parseInt(args[0]);
   } catch (NumberFormatException e) { }
   if (args.length>1) ip=args[1];
  }
  
  try {
   c.socket_connect(ip, port);
  } catch (IOException e) {
   System.out.println("\nCan not find Calculator Server.");
   System.out.println("usage: java CalculClient [port] [server IP]");
   System.exit(-1);
  }
  
  try {
   c.calcul(12,32,"+");
   System.out.println("12 + 32 = "+c.getResult());
   
   c.calcul(32,23,"-");
   System.out.println("32 - 23 = "+c.getResult());
   
   c.calcul(23,0,"/");
   System.out.println("23 / 0 : "+c.getError());
  } catch (IOException e) { }
 
 }
 
}