Client (단일 채팅 클라이언트)

hovi·2023년 5월 30일
0

JAVA

목록 보기
33/36

클라이언트용 TCP 소켓 프로그래밍 순서

  1. 서버의 IP주소와 서버가 정한 포트번호를 매개변수로 하여 클라리언트용 소켓 객체 생성
  2. 서버와의 입출력 스트림 오픈
  3. 보조 스트림을 통해 성능 개선
  4. 스트림을 통해 읽고 쓰기
  5. 통신 종료

ReceiveThread

package 단일채팅클라이언트;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;

public class RcvThread extends Thread {
    private final Socket socket;
    private String rcvString;
    public RcvThread(Socket socket) {
        this.socket = socket;
    }
    @Override
    public void run() {
        try {
            DataInputStream buf = new DataInputStream(socket.getInputStream());
            while (true) {
                rcvString = buf.readUTF();
                if(rcvString == null) {
                    System.out.println("상대방 연결이 종료 되었습니다.");
                } else {
                    System.out.println("상대방 : " + rcvString);
                }
            }
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}

SendThread

package 단일채팅클라이언트;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;

public class SndThread extends Thread {
    private final Socket socket;
    Scanner sc = new Scanner(System.in);
    public SndThread(Socket socket) {
        this.socket = socket;
    }
    @Override
    public void run() {
        try {
            DataOutputStream sndWriter = new DataOutputStream(socket.getOutputStream());
            String sndString;
            while (true) {
                sndString = sc.nextLine();
                // UTF-8 인코딩을 사용해서 문자열 출력, socket에 출력
                sndWriter.writeUTF(sndString);
                sndWriter.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

SocketClient

package 단일채팅클라이언트;
import java.io.IOException;
import java.net.ConnectException;
import java.net.Socket;
import java.net.UnknownHostException;

public class SingleChatClient {
    public static void main(String[] args)  {
        Socket sock = null;
        try {
            sock = new Socket("localhost", 8888);
            System.out.println("서버와 연결되었습니다.");
        } catch(ConnectException e) {
            System.out.println("서버와의 연결이 거절었습니다. 서버를 먼저 실행 하세요.");
        } catch (UnknownHostException e) {
            System.out.println("서버를 알 수 없습니다.");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        if(sock != null) {
            RcvThread rcvThread = new RcvThread(sock);
            rcvThread.start();
            SndThread sndThread = new SndThread(sock);
            sndThread.start();
        }
    }
}
profile
풀스택 예비 개발자

0개의 댓글