2013년 7월 2일 화요일

(130702) 7일차 ServerSocketTest2.java, ClientTest2.java (TCP/IP Server & Client 채팅 프로그램)

 - ServerSocketTest2.java 소스 (단방향)
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.NoSuchElementException;
import java.util.Scanner;

public class ServerSocketTest2 {

public static void main(String[] args) {
try {
// 데이터를 주고받는 소켓클래스 선언
Socket socket = null;
// 네트워크로 다른 클라이언트의 데이터를 받기위해서 객체를 생성
ServerSocket server = new ServerSocket(9000); // 포트번호 9000번

// 받기 위한 준비
System.out.println("준비");
// 클라이언트로부터 넘어온 소켓을 이용하여 데이터를 주고 받음
socket = server.accept();
System.out.println("준비완료");

Scanner sc = new Scanner(socket.getInputStream()); // 소켓을 이용해서 getInputStream()을 만듬

while(true){
// 클라이언트로부터 데이터를 통해 넘어온 값을 읽어드림
String data = sc.nextLine(); // 어떤게 넘어올지 모르므로 nextLine()이 적당
System.out.println(data);
}

} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchElementException e) {
}
}
}


 - ClientTest2.java 소스 (단방향)
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class ClientTest2 {
public static void main(String[] args) {
try {
// 서버에 접속하기 위한 객체
Socket client = new Socket("203.233.196.185", 9000);
Scanner sc = new Scanner(System.in);
// 데이터를 전송하기 위해서 outputstream 객체 생성
PrintWriter pw = new PrintWriter(client.getOutputStream()); // client는 소켓 - 소켓을 이용해서 getOutputStream()을 만듬

while(true){
String data = sc.nextLine(); // 줄 단위로 입력받음

// 데이터를 넘겨줌
pw.println(data);
pw.flush(); // 즉시 넘겨줌

if(data.equals("1")){ // 1을 누르면 종료
pw.close();
break;
}
}

} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}


 - Client 실행













 - 결과










 - ServerSocketTest2.java 소스 (양방향)
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.NoSuchElementException;
import java.util.Scanner;

public class ServerSocketTest2 {

public static void main(String[] args) {
try {
// 데이터를 주고받는 소켓클래스 선언
Socket socket = null;
// 네트워크로 다른 클라이언트의 데이터를 받기위해서 객체를 생성
ServerSocket server = new ServerSocket(9000); // 포트번호 9000번

// 받기 위한 준비
System.out.println("준비");
// 클라이언트로부터 넘어온 소켓을 이용하여 데이터를 주고 받음
socket = server.accept();
System.out.println("준비완료");

Scanner sc = new Scanner(socket.getInputStream()); // 소켓을 이용해서 getInputStream()을 만듬

Scanner outputsc = new Scanner(System.in);
// 데이터를 전송하기 위해서 outputstream 객체 생성
PrintWriter pw = new PrintWriter(socket.getOutputStream()); // 소켓을 이용해서 getOutputStream()을 만듬

while(true){
// 클라이언트로부터 데이터를 통해 넘어온 값을 읽어드림
String data = sc.nextLine(); // 어떤게 넘어올지 모르므로 nextLine()이 적당
System.out.println("클라이언트로부터 받은 메시지 : "+data);

System.out.print("보낼 메시지를 작성하시오 : ");
String inputdata = outputsc.nextLine();
// 데이터를 넘겨줌
pw.println(inputdata);
pw.flush();

if(data.equals("1")){
pw.close();
break;
}
}

} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchElementException e) {
}
}
}


 - ClientTest2.java 소스 (양방향)
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class ClientTest2 {
public static void main(String[] args) {
try {
// 서버에 접속하기 위한 객체
Socket client = new Socket("203.233.196.185", 9000);
Scanner sc = new Scanner(System.in);
// 데이터를 전송하기 위해서 outputstream 객체 생성
PrintWriter pw = new PrintWriter(client.getOutputStream()); // client는 소켓 - 소켓을 이용해서 getOutputStream()을 만듬

Scanner inputsc = new Scanner(client.getInputStream()); // 메시지를 받기위한 getInputStream()
while(true){
System.out.print("보낼 메시지를 작성하시오 : ");
String data = sc.nextLine(); // 줄 단위로 입력받음
// 데이터를 넘겨줌
pw.println(data);
pw.flush(); // 즉시 넘겨줌
String redata = inputsc.nextLine();
System.out.println("받은 메시지 : " +redata);
if(data.equals("1")){
pw.close();
break;
}
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}


 - Client 실행
















 - 결과