import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.List;
import java.util.StringTokenizer;
import org.apache.lucene.analysis.kr.morph.MorphAnalyzer;
import org.apache.lucene.analysis.kr.KoreanTokenizer;
import java.io.StringReader;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.kr.morph.AnalysisOutput;
public class TCPServer { //nstart 대신에 사용하시는 클래스 이름을 적으셔요
public static void main(String[] args) throws IOException { // 메인함수, IOException
ServerSocket serverSocket = null; //서버소켓 생성
Socket clientSocket = null; // 서버소켓이 지정한 포트를 타고온 상대 ip를 저장할 수 있다.
PrintWriter out = null; // String 타입의 문자를 보낼수 있는 함수.
BufferedReader in = null;//stream 타입의 문자를 읽어서 저장할 수 있는 함수.
serverSocket = new ServerSocket(5555); //서버소켓 생성
try {
// 서버 소켓을 만들고 연결을 기다린다.
clientSocket = serverSocket.accept(); //클라이언트로부터 데이터가 오는것을 감지한다.
System.out.println("클라이언트 연결");
// 클라이언트로 부터 데이터를 받는다.
out = new PrintWriter(clientSocket.getOutputStream(), true); //String 타입을 stream 형태로 변환하여 전송한다는 뜻.
in = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream(),"utf-8")); //소켓에서 넘오는 stream 형태의 문자를 얻은 후 읽어 들어서 //bufferstream 형태로 in 에 저장.
while (true) {
String inputLine = null; //in 으로 받아들인 데이터를 저장할 string 생성
inputLine = in.readLine(); //in에 저장된 데이터를 String 형태로 변환 후 읽어들어서 String에 저장
System.out.println("클라이언트로 부터 받은 문자열:" + inputLine); //저장된값 콘솔 출력
out.println(inputLine); //돌아온값을 다시 되돌려 보낸다. //String이 stream으로 변환되어 전송됨.
if (inputLine.equals("quit")) //만약 받은 값이 quit 일경우 종료
break;
}
out.close();
in.close();
clientSocket.close();
serverSocket.close(); //열린 모든것을 닫아준다.
} catch (Exception e) {
e.printStackTrace();
}
}
}
이게 서버 이구요
package com.example.ex01_client;
import java.io.BufferedReader; //우와 많다 ㅎㅎ..
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity { //메인 activity 시작!
private Socket socket; //소켓생성
BufferedReader in; //서버로부터 온 데이터를 읽는다.
PrintWriter out; //서버에 데이터를 전송한다.
EditText input; //화면구성
Button button; //화면구성
TextView output; //화면구성
String data; //
@Override
protected void onCreate(Bundle savedInstanceState) { //앱 시작시 초기화설정
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//start
input = (EditText) findViewById(R.id.input); // 글자입력칸을 찾는다.
button = (Button) findViewById(R.id.button); // 버튼을 찾는다.
output = (TextView) findViewById(R.id.output); // 글자출력칸을 찾는다.
// 버튼을 누르는 이벤트 발생, 이벤트 제어문이기 때문에 이벤트 발생 때마다 발동된다. 시스템이 처리하는 부분이 무한루프문에
//있더라도 이벤트가 발생하면 자동으로 실행된다.
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//버튼이 클릭되면 소켓에 데이터를 출력한다.
String data = input.getText().toString(); //글자입력칸에 있는 글자를 String 형태로 받아서 data에 저장
Log.w("NETWORK", " " + data);
if (data != null) { //만약 데이타가 아무것도 입력된 것이 아니라면
out.println(data); //data를 stream 형태로 변형하여 전송. 변환내용은 쓰레드에 담겨 있다.
}
}
});
Thread worker = new Thread() { //worker 를 Thread 로 생성
public void run() { //스레드 실행구문
try {
//소켓을 생성하고 입출력 스트립을 소켓에 연결한다.
socket = new Socket("192.168.0.7", 5555); //소켓생성
out = new PrintWriter(socket.getOutputStream(), true); //데이터를 전송시 stream 형태로 변환하여 전송한다.
in = new BufferedReader(new InputStreamReader(
socket.getInputStream(),"utf-8")); //데이터 수신시 stream을 받아들인다.
} catch (IOException e) {
e.printStackTrace();
}
//소켓에서 데이터를 읽어서 화면에 표시한다.
try {
while (true) {
data = in.readLine(); // in으로 받은 데이타를 String 형태로 읽어 data 에 저장
Log.i("App", data);
output.post(new Runnable() {
public void run() {
output.setText(data); //글자출력칸에 서버가 보낸 메시지를 받는다.
}
});
}
} catch (Exception e) {
}
}
};
worker.start(); //onResume()에서 실행.
}
@Override
protected void onStop() { //앱 종료시
super.onStop();
try {
socket.close(); //소켓을 닫는다.
} catch (IOException e) {
e.printStackTrace();
}
}
}
이게 MainActivity.java 입니다.
이대로 실행을 해보면


이런식으로 한글이 깨져서 나옵니다... UTF-8로 설정을 했는데... 제가 뭐를 빠뜨린건가요?
영어랑 숫자는 잘 나옵니다;;
알려주세요~ ㅠㅠ