-클라이언트 소스입니다.-

 

package org.androidtown.socket;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class AndroidSocketClient extends Activity implements OnClickListener {

 Socket sock;
 ObjectOutputStream outstream;
 ObjectInputStream instream;
 String obj;
 TextView aText;
 EditText aEdit;
 Button aButton;
 String hostname;
 int port;

 Handler handler;
 Drunnable runnable;
 Thread thread;

 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  aText = (TextView) findViewById(R.id.TextView);
  aEdit = (EditText) findViewById(R.id.ShowMessage);
  aButton = (Button) findViewById(R.id.SendMessage);

  aButton.setOnClickListener(this);

  hostname = "hostIP";
  port = 5001;

  handler = new Handler();
  runnable = new Drunnable();
  thread = new Thread(new Runnable() {// 쓰레드 생성시 함수인자로 runnable
     public void run() {
      
      try{

      while(true)
      {
       sock = new Socket(hostname, port);                                            
       instream = new ObjectInputStream(sock.getInputStream());
       
       int bytes = instream.read();
                   if (bytes <= 0)
                               continue; 
       
      obj = (String) instream.readObject();
      handler.post(runnable);
      sock.close();

 

->이 부분이 문제입니다. 정보를 보내는 부분은 메인 쓰레드에서 처리를 하는데, 정보를 수신하는 부분은

따로 쓰레드를 이렇게 만들어서 쓰는데, 서버로 부터 정보가 있을때만 읽어들이는 방법을 잘모르겠습니다. ㅠ


       
      }
      }
      catch(Exception e)
      {
       e.getStackTrace();
      }
      
   
     }
    });
  thread.start();
 }

 public void onDestroy() {
  super.onDestroy();
  thread.stop();
 }

 public void SendMessage(String msg) {
  try {
   sock = new Socket(hostname, port);
   outstream = new ObjectOutputStream(sock.getOutputStream());
   outstream.writeObject(msg);
   outstream.flush();

   //instream = new ObjectInputStream(sock.getInputStream());
   //obj = (String) instream.readObject();

   //aText.append("\n"+obj);
   sock.close();

  } catch (Exception ex) {
   ex.printStackTrace();
  }
 }

 public void onClick(View v) {

  String text = aEdit.getText().toString();
  aEdit.setText("");

  SendMessage(text);
  InputMethodManager imm = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE);
  imm.hideSoftInputFromWindow(aEdit.getWindowToken(), 0);

 }

 public class Drunnable implements Runnable {
  public void run()
  {
   aText.append("\n"+obj);
   
  }
 }

}

 

- 서버 소스입니다.-

package org.androidtown.socket;

import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class JavaSocketServer {

 public static void main(String[] args) {

  try {

   int portNumber = 5001;

   System.out.println("Starting Java Socket Server ...");
   ServerSocket aServerSocket = new ServerSocket(portNumber);
   // 서버 소캣생성 : 포트번호만 있으면 된다.
   System.out.println("Listening at port " + portNumber + " ...");

   Socket aSocket;
   Object obj = null;
   ObjectInputStream instream = null;
   ObjectOutputStream outstream = null;

   while (true) {// 지속적으로 대기
    aSocket = aServerSocket.accept();
    // 만들어 놓은 서버소캣의 accept()함수의 리턴되는 소캣객체
    InetAddress clientHost = aSocket.getLocalAddress();
    // 그로부터 주소를 얻는다.
    int clientPort = aSocket.getPort();
    // 그로부터 포트를 얻는다.
    System.out.println("A client connected. host : " + clientHost
      + ", port : " + clientPort);

   try{
    instream = new ObjectInputStream(aSocket.getInputStream());
    obj = instream.readObject();
    System.out.println("Input : " + obj);
   
    outstream = new ObjectOutputStream(aSocket.getOutputStream());
    outstream.writeObject(obj + " from Server.");
    outstream.flush();
    aSocket.close();
   }
   catch(IOException e)
   {
    aSocket.close();
   }
   
   }

  } catch (Exception ex) {
  
   ex.getStackTrace();
  }

 }

}

 

 

완전 초보라,, 이해부탁드립니다. ㅠㅠ