ex)
1. Server
package insu.iims.batch;
import java.net.*;
import java.io.*;
public class EchoServer {
public static void main(String[] args) {
try {
// 1. 30184번 포트에서 동작하는 ServerSocket을 생성
ServerSocket server = new ServerSocket(30184);
System.out.println("Wating Connect ..");
// 2. ServerSocket의 accept() 메소드를 실행해서 클라이언트의 접속을 대기
// : 클라이언트가 접속할 경우 accept() 메소드는 Socket 객체를 반환
Socket sock = server.accept();
InetAddress inetaddr = sock.getInetAddress();
System.out.println(inetaddr.getHostAddress() + " 로부터 접속했습니다.");
// 3. 반환받은 Socket으로부터 InputStream과 OutputStream을 구함
OutputStream out = sock.getOutputStream();
InputStream in = sock.getInputStream();
// 4. InputStream은 BufferedReader 형식으로 변환
// OutputStream은 PrintWriter 형식으로 변환
PrintWriter pw = new PrintWriter(new OutputStreamWriter(out));
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = null;
// 5. BufferedReader의 readLine() 메소드를 이용해
// 클라이언트가 보내는 문자열 한 줄을 읽어들임
while ((line = br.readLine()) != null) {
System.out.println("클라이언트로부터 전송받은 문자열 : " + line);
// 6. PrintWriter의 println을 이용해 다시 클라이언트로 전송
//pw.println(line);
// 응답전문 전달
String fullText = "SAMPLETEXTEXT00519RN01506200";
pw.println(fullText);
pw.flush();
}
// 6. IO 객체와 소켓의 close() 메소드 호출
pw.close();
br.close();
sock.close();
server.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
서버실행 : Run As - Java Application 실행(Ctrl+F11)
----------------------------------------------------------------------------------
2. Client
package insu.iims.batch;
import java.net.*;
import java.io.*;
public class EchoClient {
public static void main(String[] args) throws Exception {
//testClient();
String requestFullText ="my name is yunjae!";
String responsefullText = null;
responsefullText = getFullTextByKidi(requestFullText);
System.out.println("responsefullText >> "+responsefullText);
}
public static void testClient() {
try {
// 1. 서버의 IP와 서버의 동작 포트 값(10001)을 인자로 넣어 socket 생성
Socket sock = new Socket("127.0.0.1", 10001);
BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
// 2. 생성된 Socket으로부터 InputStream과 OutputStream을 구함
OutputStream out = sock.getOutputStream();
InputStream in = sock.getInputStream();
// 3. InputStream은 BufferedReader 형식으로 변환
// OutputStream은 PrintWriter 형식으로 변환
PrintWriter pw = new PrintWriter(new OutputStreamWriter(out));
// 4. 키보드로부터 한 줄씩 입력받는 BufferedReader 객체 생성
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = null;
// 5. 키보드로부터 한 줄을 입력받음
while ((line = keyboard.readLine()) != null) {
if (line.equals("quit"))
break;
// 6. PrintWriter에 있는 println() 메소드를 이용해 서버에게 전송
pw.println(line);
pw.flush();
// 7. 서버가 다시 반환하는 문자열을 BufferedReader에 있는
// readLine()을 이용해서 읽어들임
String echo = br.readLine();
System.out.println("서버로부터 전달받은 문자열 :" + echo);
}
pw.close();
br.close();
sock.close();
} catch (Exception e) {
System.out.println(e);
}
}
public static String getFullTextByKidi(String requestFullText) throws Exception {
String responsefullText = null;
// 서버의 IP와 서버의 동작 포트 값을 인자로 넣어 socket 생성(운영계 ip:127.0.0.1, port:30184)
//String serverIp = "127.0.0.1";
//int serverPort = 30184;
String serverIp = "127.0.0.1";
int serverPort = 30184;
Socket sock = new Socket(serverIp, serverPort);
// 생성된 Socket으로부터 InputStream과 OutputStream을 구함
OutputStream out = sock.getOutputStream();
InputStream in = sock.getInputStream();
// OutputStream은 PrintWriter 형식으로 변환
PrintWriter pw = new PrintWriter(new OutputStreamWriter(out));
// InputStream은 BufferedReader 형식으로 변환
BufferedReader br = new BufferedReader(new InputStreamReader(in));
System.out.println("보낼 문자열 : [" + requestFullText + "]");
// PrintWriter에 있는 println() 메소드를 이용해 서버에게 전송
pw.println(requestFullText);
pw.flush();
// 서버가 다시 반환하는 문자열을 BufferedReader에 있는 readLine()을 이용해서 읽어들임
responsefullText = br.readLine();
System.out.println("서버로부터 전달받은 문자열 : [" + responsefullText + "]");
pw.close();
br.close();
sock.close();
return responsefullText;
}
}
'Java Programming > Java' 카테고리의 다른 글
Template Method 패턴 (1) | 2018.07.17 |
---|---|
Synchronous vs Asynchronous (0) | 2018.02.13 |
[JAVA] 소켓 프로그래밍[펌] (0) | 2014.07.07 |
[펌]소켓통신 (0) | 2014.07.07 |
[JAVA]HashMap 클래스 (0) | 2014.03.27 |