728x90
1:1 채팅 프로그램을 구현해보았다. 서버 측 코드가 서버 소켓을 두고, 클라이언트가 연결될 때마다 소켓을 생성해주는 역할을 한다는 점과 클라이언트 측 코드가 ip, port를 기반으로 소켓을 생성(연결 시도)한다는 점이 다르다. 그 외의 실제 데이터를 주고 받는 코드는 양 측 코드가 매우 흡사하다.
Source Code
서버 측
public class ChattingServer implements Runnable {
Socket sk;
public ChattingServer() {
System.out.println("Server Start");
try {
ServerSocket ssk = new ServerSocket(6060);
sk = ssk.accept();
System.out.println("Connected with client...");
Thread thr = new Thread(this);
thr.start();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(sk.getOutputStream(), true);
String msg = "";
while ((msg = br.readLine()) != null) {
pw.println(msg);
System.out.println("Me > " + msg);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public void run() {
String clientMsg = "";
try {
InputStream is = sk.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while (true) { // 데이터를 읽을 때까지 무한 루프
clientMsg = br.readLine();
System.out.println("Someone > " + clientMsg);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) {
new ChattingServer();
}
}
클라이언트 측
public class ChattingClient implements Runnable {
String ip = "127.0.0.1"; // IP 주소의 구조 : 앞의 세 자리는 네트워크 주소, 마지막 자리는 컴퓨터 주소
int port = 6060;
Socket sk;
public ChattingClient() {
try {
sk = new Socket(ip, port);
System.out.println("Connected with chatting server");
Thread thr = new Thread(this);
thr.start();
// Input message would sended to server
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(sk.getOutputStream(), true);
String sendMsg = "";
while ((sendMsg = br.readLine()) != null) {
pw.println(sendMsg);
System.out.println("Me > " + sendMsg);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) {
new ChattingClient();
}
@Override
public void run() {
String serverMsg = "";
try {
// Read message come from server
InputStream is = sk.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while (true) {
serverMsg = br.readLine();
System.out.println("Someone > " + serverMsg);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
테스트 결과
서버 측
클라이언트 측
반응형
'Backend > Java' 카테고리의 다른 글
Java Networking) UDP 통신방식을 이용해 메세지 주고받기 (0) | 2022.04.30 |
---|---|
Java Networking) Multi Thread환경을 Synchronized를 통해 동기화시키기 (0) | 2022.04.29 |
Java Networking) Socket을 통한 데이터 전송 (0) | 2022.04.21 |
Java Networking) ServerSocket 생성해 Socket 연결해보기 (0) | 2022.04.18 |
Java Networking) URL, URLConnection, openStream(), openConnection(), getInputStream() (0) | 2022.04.12 |