Java Networking : TCP로 서버와 클라이언트 간, 메시지 주고받기
학원에서배운 서버와 클라이언트 구축하여 메시지 주고받는 소스입니다.
아래는 서버 소스입니다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
public class ServerTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//통신을 하려면 일단 IP주소는 알아야함.
//자바에서 IP주소에 관련된 정보를 가지고 있는 클래스 : InetAddress
//본인의 IP주소를 확인할 수 있는 방법
try {
System.out.println( InetAddress.getLocalHost().getHostAddress() );
System.out.println( InetAddress.getLocalHost().getHostName() );
System.out.println( InetAddress.getLoopbackAddress().toString() );
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//통신을 구현하려면 2가지 용어를 알아야함.
//1. IP주소 - 그 컴퓨터의 고유한 주소(숫자): 4억개
//2. port번호 - 그 컴퓨터 안에서의 프로그램 분류번호(65천개) 0~65535 : 0~1024까지는 사용하지 마세요.
//ex) 부산항(IP주소), 3번항구(port번호)
//서버 프로그램으로서의 작업
//1. 서버소켓을 만들어 놓는 작업!
try {
ServerSocket serverSocket= new ServerSocket(10001);
System.out.println("서버소켓이 생성되었습니다.");
//2. 클라이언트의 접속 기다리기..
System.out.println("클라이언트의 접속을 기다랍니다....");
Socket socket= serverSocket.accept();//여기서 커서(스레드)가 대기함.
System.out.println( socket.getInetAddress().getHostAddress() + "클라이언트가 접속하셨습니다.");
//3. 데이터를 주고받을 Stream만들기!!
//데이터를 입력받은 스트림 만들기 : 해임달(Socket)에게 무지개로드(InputStream)을 열어주세요!!
//연결된 client소켓과 다리 연결!!
InputStream is= socket.getInputStream();//바이트 스트림
InputStreamReader isr= new InputStreamReader(is);//문자 스트림
BufferedReader reader= new BufferedReader(isr);//보조 문자 스트림
//클라이언트와 연결된 다리(Stream)을 통해 데이터를 읽어오기
String msg= reader.readLine();//클라이언트가 데이터를 보내면 한줄씩 일기...여기서 클라이언트가 데이터를 보낼때까지 대기....
System.out.println("받은 데이터 : " + msg);
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //0~65535
}
}
아래는 클라이언트 소스입니다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class ClientTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//클라이언트는 서버의 IP주소, port번호를 알아야 접속할 수 있음.
String serverIP= " 접속할 서버 주소 ";
//serverIP= "127.0.0.1";//OK
//serverIP="localhost";//OK
//클라이언트의 작업
try {
//1. 서버와 연결하는 Socket생성(ip주소, 포트번호)
Socket socket= new Socket(serverIP, 10001);
System.out.println("서버와 연결이 되었습니다.");
//2. 데이터를 주고받을 Stream만들기!!
//데이터를 내보내는 Stream : 해임달(Socket)객체에게 무지개로드(Stream)을 열어달라고!!
OutputStream os= socket.getOutputStream();//바이트 스트림
//보조스트림을 이용하면 write()작업이 보다 수워함.
//OutputStreamWriter osw= new OutputStreamWriter(os);//문자스트림
PrintWriter writer= new PrintWriter(os); //보조 문자스트림
System.out.println("스트림 연결작업 성공!!..데이터전송 가능상태");
//보낼 데이터를 키보드로 입력받기
Scanner scanner= new Scanner(System.in);
System.out.print("보낼 메세지 입력 : ");
String msg= scanner.nextLine();
//스트림을 통해서 데이터 전송!
writer.println(msg);
writer.flush();
writer.close();
System.out.println("메세지 전송이 완료 되었습니다.");
} catch (UnknownHostException e) {
System.out.println("서버의 위치를 찾을 수 없음.");
} catch (IOException e) {
System.out.println("서버와 통신이 불가합니다.");
}
}
}
결과 테스트
서버와 연결하고 메시지를 보냅니다.
받은 메시지가 뜹니다.
'Java Programming' 카테고리의 다른 글
Java : GUI, 메뉴 만들기 (0) | 2018.11.21 |
---|---|
Java : GUI, 리스트뷰(List View), 클릭한 이미지만 보이게 하기 (1) | 2018.11.21 |
Java : GUI, 체크박스(Check Box), Radio 버튼, ComboBox 만들기 (0) | 2018.11.20 |
Java : Swing 버튼과 이미지 띄우기 (0) | 2018.11.19 |
Java : AWT 창 띄우고 버튼 만들기 (0) | 2018.11.19 |