3번 정도의 채팅 로직을 만들었고 이려 시행착오가 있었는데 오늘의 코드가 깔끔한 것 같아 정리 한번 해보려 합니다
이번 로직은 다중채팅은 아니고 소켓통신을 응용한 1:1 채팅입니다
Server
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class OneToOneServer {
//bad code
public static void main(String[] args) throws Exception {
//서버 생성
ServerSocket serverSocket =new ServerSocket(5555);
//1:1채팅 이라 연결을 한번만 받는다
System.out.println("ready.....");
//서버 열기
Socket client =serverSocket.accept();
DataInputStream din = new DataInputStream(client.getInputStream());
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
//채팅할 Scanner
Scanner scanner =new Scanner(System.in);
new Thread(()-> {
while (true) {
try {
//메시지 읽어오기
String clientMsg = din.readUTF();
//읽어온 메시지 화면에 보여주기
System.out.println(clientMsg);
} catch (Exception e) {
}
}
}).start();
while (true){
System.out.println("답장을 입력하세요");
//답장 입력하기
String myMsg = scanner.nextLine();
// 메시지 보내주기
dos.writeUTF(myMsg);
}//end while
}
}
오늘 새로배운 DataInputStream / DataOutPutStream을 사용했고 람다식을 적용한 Thread 도 사용했습니다
새로 배운 개념들은 개념정리에서 따로 설명하겠습니다
Client
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import java.util.Scanner;
public class OneToOneClient {
//bad code
public static void main(String[] args) throws Exception{
Socket socket =new Socket("192.168.0.74" ,5555);
DataInputStream din = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
//채팅할 Scanner
Scanner scanner =new Scanner(System.in);
//Thread 사용으로 병렬실행됨
new Thread(()-> {
while (true) {
try { //읽어오기
String clientMsg = din.readUTF();
System.out.println(clientMsg);
} catch (Exception e) {
}
}
}).start();
while (true){
//메시지 보내기
System.out.println("메시지를 입력하세요");
String myMsg = scanner.nextLine();
dos.writeUTF(myMsg);
}//end while
}
}
Client 부분은 Server 과 코드가 거의 동일합니다 이렇게 1:1 소켓통신이 가능한 로직이 완성되었습니다!!
오늘은 사실 개념 정리 부분이 중요해서 그 부분을 정리해서 찾아뵙겠습니다
'개발자 성장 일지' 카테고리의 다른 글
2022.03.24 ⭐DB 그리고 객체지향의 문제점 (0) | 2022.03.25 |
---|---|
2022.03.24 수업일지 (0) | 2022.03.24 |
2022.03.23 IO를 활용한 파일 보내기 (0) | 2022.03.23 |
2022.03.21 다양한 예외 처리 (0) | 2022.03.21 |
2022.03.21 예외 처리 (0) | 2022.03.21 |