ex> 서버와 클라이언트 구성 (채팅 참고)
1) 서버를 먼저 실행하고
2) 클라이언트를 실행한다. 클라이언트에서 입력하면 서버에서 받아 화면에 뿌려준다.
1. server
MyServer01.java
package test02.net;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
class ReceiveServer extends Thread{ //데이터를 수신하는 스레드
private Socket sock;
public ReceiveServer(Socket sock){
this.sock=sock;
}
public void run(){
try{
//상대방(클라이언트)가 보내온 문자열을 읽어오기위한 스트림생성
BufferedReader br=
new BufferedReader(new InputStreamReader(sock.getInputStream()));
while(true){
//상대방(클라이언트)가 보내온 문자열 읽어오기
String msg=br.readLine();
if(msg==null){
System.out.println("상대방이 접속을 해제했어요!");
break;
}
System.out.println("상대방>>" + msg);
}
br.close();
sock.close();
}catch(IOException ie){
System.out.println(ie.getMessage());
}
}
}
class SendServer extends Thread{//데이터를 보내는 스레드
private Socket sock;
public SendServer(Socket sock){
this.sock=sock;
}
public void run(){
//키보드로 문자열 입력받기위한 스트림객체 생성
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
try{
//문자열을 상대방에 보내기위한 스트림객체 생성
PrintWriter pw=new PrintWriter(sock.getOutputStream());
while(true){
//키보드로 문자열 입력받기
String msg=br.readLine();
if(msg.equals("exit")) break;
//문자열을 클라이언트에 보내기
pw.println(msg);
pw.flush();
}
pw.close();
sock.close();
}catch(IOException ie){
System.out.println(ie.getMessage());
}
}
}
public class MyServer01 {
public static void main(String[] args) {
ServerSocket server=null;
try{
server=new ServerSocket(3000);
System.out.println("클라이언트접속대기중..");
Socket sock=server.accept();
System.out.println("클라이언트가 접속했습니다.");
//데이터(문자열)를 전송받는 스레드 실행
new ReceiveServer(sock).start();
//데이터(문자열)를 보내는 스레드 실행
new SendServer(sock).start();
server.close();
}catch(IOException ie){
System.out.println(ie.getMessage());
}
}
}
2. client
MyClient01.java
package test02.net;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
class ReceiveClient extends Thread{//서버에서 보내온 데이터를 수신하는 스레드
private Socket sock;
public ReceiveClient(Socket sock){
this.sock=sock;
}
public void run(){
try{
//서버가 보내온 데이터를 읽어오기 위한 스트림객체 생성
BufferedReader br=
new BufferedReader(new InputStreamReader(sock.getInputStream()));
while(true){
//서버가 보낸 문자열 읽어오기
String msg=br.readLine();
if(msg==null) {
System.out.println("상대방이 접속을 해제했어요!");
break;
}
System.out.println("상대방>>" + msg);//받은문자열화면에출력
}
br.close();
sock.close();
}catch(IOException ie){
System.out.println(ie.getMessage());
}
}
}
class SendClient extends Thread{
private Socket sock;
public SendClient(Socket sock){
this.sock=sock;
}
public void run(){
//키보드로부터 입력받기 위한 스트림객체
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
try{
//상대방에 데이터를 보내기위한 스트림객체생성
PrintWriter pw=new PrintWriter(sock.getOutputStream());
while(true){
String msg=br.readLine();//키보드로 문자열 입력받기
if(msg.equals("exit")) break;//while끝내기
pw.println(msg);//상대방에 문자열 보내기
pw.flush();
}
pw.close();
sock.close();
}catch(IOException ie){
System.out.println(ie.getMessage());
}
}
}
public class MyClient01 {
public static void main(String[] args) {
Socket sock=null;
try{
sock=new Socket("127.0.0.1",3000);
System.out.println("서버접속성공!");
//데이터를 읽어오는 스레드 실행하기
new ReceiveClient(sock).start();
//데이터를 보내는 스레드 실행하기
new SendClient(sock).start();
}catch(UnknownHostException ue){
System.out.println(ue.getMessage());
}catch(IOException ie){
System.out.println(ie.getMessage());
}
}
}
클라이언트에서 입력
서버쪽에 화면에 넘어온 값을 출력한다.
'JAVA' 카테고리의 다른 글
AWT ( Frame / Button / Layout / JPanel ) - 간단한 예제 (0) | 2014.09.13 |
---|---|
Network - 파일전송 ( Ⅳ ) (0) | 2014.09.12 |
Network ( Ⅱ ) (0) | 2014.09.12 |
Network ( Ⅰ ) (0) | 2014.09.12 |
스레드(Thread) (0) | 2014.09.12 |