반응형
- Socket 통신 샘플 소스
- 소스 설명은 주석 참조
package sample;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketSample {
public static void client( int port ) throws UnknownHostException, IOException {
while( true ) {
// 1. 키보드 입력 대기 상태(입력이벤트 LOCK)
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ));
String msg = br.readLine();
byte[] bMsg = msg.getBytes();
// 2. 매개변수 포트로 소켓을 생성 및 연결한다.
Socket socket = new Socket("127.0.0.1", port);
// 3. 생성된 소켓으로 메시지를 보낸다.
OutputStream os = socket.getOutputStream();
os.write(bMsg);
os.flush();
System.out.println("[client send]:" + new String(bMsg));
// 4. 생성된 소켓으로 메시지를 읽는다.
InputStream is = socket.getInputStream();
bMsg = new byte[1024];
is.read(bMsg);
String read = new String(bMsg).trim();
System.out.println("[client recv]:" + read);
// 대문자 Q 값이 들어오면 종료한다.
if( "Q".equals( msg)) {
socket.close();
System.out.println("[client exit]");
break;
}
}
}
public static void server( int port ) throws IOException {
System.out.println("[server start]:[port]:"+ port);
// 1. 별도의 프로세스(쓰레드)로 서버를 기동한다.
new Thread(()->{
try {
// 2. 매개변수 포트로 서버소켓을 생성한다.
ServerSocket ss = new ServerSocket( port );
while( true ) {
// 3. 소켓 접속 대기 상태(접속이벤트 LOCK)
Socket socket = ss.accept();
System.out.println("[ServerSocket connected]:" + socket.isConnected());
// 4. socket 에 작성된 내용을 읽는다.
InputStream is = socket.getInputStream();
byte[] bMsg = new byte[1024];
is.read(bMsg);
String read = new String(bMsg).trim();
System.out.println("[server recv]:" + read);
// 5. 서버 응답 메시지를 작성한다.
String msg = "[i am server]:".concat(read);
bMsg = msg.getBytes();
// 6. 서버 메시지를 클라이언트로 보낸다.
OutputStream os = socket.getOutputStream();
os.write(bMsg);
os.flush();
System.out.println("[server send]:" + new String(bMsg));
//ss.close();
// 대문자 Q 값이 들어오면 종료한다.
if( "Q".equals( read)) {
socket.close();
ss.close();
System.out.println("[server exit]");
break;
}
}
}catch(IOException e) {
e.printStackTrace();
}
}).start();
}
public static void main(String...strings) throws Exception {
final int port = 60040;
// 1. 소켓서버 기동함
SocketSample.server( port );
// 2. 클라이언트 호출
SocketSample.client( port );
}
}
- 소스 테스트 결과
- 큰 틀에서의 설명을 하자면, Socket 의 Input/Output 스트림을 통해서 서버와 데이터를 주고 받는 것으로 이해하면 편하다.
- 자바 IO 관련 개념도 필요한 부분이다.
- 1바이트 IO : ~Stream 클래스
- 2바이트 IO : ~Reader/Writer 클래스
반응형
'IT > Java' 카테고리의 다른 글
인텔리제이 커뮤니티(Intellij Community)에 스프링부트(Springboot) 프로젝트 생성하기 (0) | 2024.02.14 |
---|---|
인텔리제이(Intellij)를 사용하다. (0) | 2024.02.13 |
Spring Integration (0) | 2023.08.17 |
[Java] java.nio.file.Files 클래스 (0) | 2022.10.31 |
[Java] NIO 기본동작방식 및 개념? (1) | 2022.10.11 |
enum 열거형 (0) | 2022.07.22 |
디폴트 메서드(default method) (0) | 2022.07.08 |
[람다식] JAVA에서의 람다식/기본편 (0) | 2022.07.08 |
[개발환경] 이클립스 / JDK (0) | 2022.06.20 |
1. 전자정부프레임워크 기본설정 (0) | 2020.05.19 |