ChatClient

1. IT Story/Development 2012. 3. 29. 11:40

 

ChatClient

 

package exam.Chat;
import java.io.*;
import java.net.*;

import android.app.Activity;
import android.os.*;
import android.view.*;
import android.widget.*;


public class ChatClient extends Activity {
 View page1,page2; // 로그인과 로그아웃에 따라 페이지 전환
 TextView txtid,txtloginid; //로그인, 로그아웃시에 보여질 텍스트뷰
 EditText txtmid,txtsend; // 로그인, 로그아웃시에 보여질 입력창
 
 String ip; // ip 값을 받기
 Socket socket; // 소캣을 이용
 
 // 입출력 스트림
 BufferedReader inMsg;
 PrintWriter outMsg;
 
 mThread thread; //멀티스래드
 
 boolean status; // 현재상태
 
 String msg;     //메시지 담기
 String[] rmsg; //현재 로그인인지 아닌지에 대한 값을 받음
 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main); //main 레이아웃을 가져옴       
       
        //각각의 레이아웃(페이지, 텍스트뷰 버튼 등..)의 위치 확인
        page1=findViewById(R.id.page1);
        page2=findViewById(R.id.page2);
        txtid=(TextView)findViewById(R.id.txtid);      
        txtsend=(EditText)findViewById(R.id.txtsend);
        txtloginid=(TextView)findViewById(R.id.txtloginid);
        txtmid=(EditText)findViewById(R.id.txtmid);
        findViewById(R.id.btnlogin).setOnClickListener(mClickListener);
        findViewById(R.id.btnlogout).setOnClickListener(mClickListener);
        findViewById(R.id.btnsend).setOnClickListener(mClickListener);
       
        ip="192.168.43.33";
       
    }
   
    Button.OnClickListener mClickListener = new Button.OnClickListener(){ //로그인 버튼을 눌렀을때
     public void connectServer(){
      try {
       
       socket = new Socket(ip,8888);  // 소캣이 할당되고
       
       txtmid.append("[Client]Server connected");  //연결성공시 화면에 출력, 자동으로 띄어씀(append)  
      
       inMsg = new BufferedReader(new InputStreamReader(socket.getInputStream(), "euc-kr")); //받아오는 메시지
       //outMsg = new PrintWriter(socket.getOutputStream(),true); // 입력을 통해 출력하는 메시지는 깨짐
       
       outMsg = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "euc-kr")),true);
      
       outMsg.println(txtid.getText()+"/"+"login"); // 로그인 확인 메시지
       
       
       thread = new mThread(); //멀티스래드 생성
       thread.start();   //스래드 실행
      }
      catch(Exception e) {         
       System.out.println("[MultiChatClient]connectServer() Exeption 발생");
      }
     }

     public void onClick(View v){
      
      switch(v.getId()){  
       case R.id.btnlogin:  //로그인 버튼을 눌렀을때
             page2.setVisibility(View.VISIBLE);
             page1.setVisibility(View.INVISIBLE);
             txtid.setText(txtloginid.getText());
           
             connectServer();
          
             break;
            
      case R.id.btnlogout:   //로그 아웃 버튼을 눌렀을때  
       page1.setVisibility(View.VISIBLE); 
           
          page2.setVisibility(View.INVISIBLE);
          txtloginid.setText("");
          txtloginid.setHint("id입력");
          txtmid.setText("");
          break;
      case R.id.btnsend:  //보내기 버튼을 눌렀을때
       
       outMsg.println(txtid.getText()+"/"+txtsend.getText());
       txtsend.setText("");
          break;
      }
     }
    };
    class mThread extends Thread{ 
     public void run() {
      
      status=true;
      
      while(status) {  //지금의 상태를 확인해서
       try{
        
        msg = inMsg.readLine(); //메시지를 읽고
        rmsg = msg.split("/");  // 띄어쓰기      
        mhandler.sendEmptyMessage(0); //핸들러를 통해서 메시지를 보냄
       }
       catch(IOException e) {        
        status = false;
       }
      }
      System.out.println("[MultiChatClient]"+thread.getName()+"종료됨");
      
     }
    }
    Handler mhandler = new Handler(){
     public void handleMessage(Message msg){
      if(msg.what==0){ //메시지의 의미를 설명, 의미가 정해져 있지는 않으며 핸들러별로 지역적으로 핸들러와 충돌할 위험이 없다.
       txtmid.append(rmsg[0]+">"+rmsg[1]+"\n");
      }
     }
    };
   
}

'1. IT Story > Development' 카테고리의 다른 글

heapSort  (0) 2012.04.04
selectionSort  (0) 2012.04.04
shellSort  (0) 2012.04.04
오픈 API를 이용한 간단한 번역프로그램  (0) 2012.03.29
MultiChatServer  (0) 2012.03.29
MultiChatClient  (0) 2012.03.29
큐를 이용한 간단한 구직Pro  (0) 2012.03.29
queueADT를 이용한 간단한 응용프로그램  (0) 2012.03.29
블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,