이건 JAVA project
ChatServer.class
package chat;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ChatServer {
int PORT=5000;
public ChatServer(){//default Construtor
System.out.println("시작");
try {
//1.서버소켓을 생성한다. port
ServerSocket server = new ServerSocket(PORT);
System.out.println("서버생성 및 레디 상태");
while(true){
//2.서버소켓이 클라이언트가 접속할 수 있도록 ready
Socket socket = server.accept();//accept에 block
String who = socket.getInetAddress().getHostAddress();
System.out.println("접속 IP: "+who);
ClientThread thread= new ClientThread(socket);
thread.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
//클라이언트와 데이터를 주고 받는 기능을 담당
class ClientThread extends Thread{
Socket socket;
BufferedReader br; //데이터 받을 때 사용
PrintWriter pw; //데이터 보낼 때 사용
public ClientThread(Socket socket) {
this.socket=socket;
try {
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
br = new BufferedReader(isr);
pw = new PrintWriter(socket.getOutputStream());
//Line 단위로 보냈으니 Line 단위로 읽자
String firstMessage = br.readLine();
System.out.println(firstMessage);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
super.run();
try {
String line="";
while( (line = br.readLine()) !=null){
System.out.println(line);
send(line);
}
} catch (Exception e) {
}
}
//데이터 보내는 메서드
public void send(String line){
pw.println(line);
pw.flush();
}
}
public static void main(String[] args) {
new ChatServer();
}
}
manifast.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gusfree.chatclient"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".ChatClientActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
main.xml<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" >
<requestFocus />
</EditText>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
ChatClientActivity.javapackage com.gusfree.chatclient;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.TextView;
public class ChatClientActivity extends Activity implements OnClickListener{
TextView textView;
EditText editText;
private final int PORT=5000;
private final String IP="ip를 적어주삼~";//cmd창에,ipconfig명령어
Socket socket;
PrintWriter pw; //데이터를 보낼 때 사용할 객체
BufferedReader br; //데이터를 받을 때 사용할 객체
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView=(TextView) findViewById(R.id.textView1);
editText=(EditText) findViewById(R.id.editText1);
findViewById(R.id.button1).setOnClickListener(this);
//서버와 Socket으로 연결하기
try {
socket = new Socket(IP,PORT);//서버연결
OutputStream os = socket.getOutputStream();
pw = new PrintWriter(os);
InputStream is = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
/* 바이트 단위 전송
* pw.write("안녕? I'm Cityboy");
* pw.flush(); */
//Line 단위 전송
pw.println("hi? I'am kj");
pw.flush();
//서버로부터 오는 데이터를 받는 스레드 생성 + 실행
new ReceiveThread().start();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//서버로 부터 오는 데이터를 받는 역활을 맡는다.
class ReceiveThread extends Thread{
String line;
@Override
public void run() {
super.run();
try {
while( (line=br.readLine()) != null){
/*주의: 스레드에서는 뷰에 접근할 수없다.*/
//대안1:post 메서드 사용, 대안2:핸들러 사용
textView.post(new Runnable() {
@Override
public void run() {
String before = (String) textView.getText();
textView.setText(line+"\n"+before);
}
});
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onClick(View v) {
String msg = editText.getText().toString().trim();
pw.println(msg);
pw.flush();
}
}'Android > 2012.04월 강좌' 카테고리의 다른 글
| 13일차 Font (0) | 2012.05.14 |
|---|---|
| 12일차 SocketServer 2 (Client,Server C->C) (0) | 2012.05.11 |
| 11일차 Json (0) | 2012.05.10 |
| 11일차 NavarOpenAPI 이용한 Dom Parser (0) | 2012.05.10 |
| 11일차 DOM과 SAX의 기술적 특징 (0) | 2012.05.10 |