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 |