반응형
소켓통신 프로그래밍
소캣 생성 및 기본 연결
Client
public class client{
static final String IPADDRESS = "127.0.0.1";
static final int PORTNUM = 8000;
public static void main(String[] args) throws IOException {
try(Socket socket = new Socket(IPADDRESS, PORTNUM)){
System.out.println("서버연결완료");
}
}
}
- ip와 port를 통하여 서버와 연결
Server
public class server{
//8000번 포트로 서버오픈
public static void main(String[] args) throws IOException{
try(ServerSocket serverSocket = new ServerSocket(8000)){
System.out.println("server open complete");
//클라이언트 연결
//계속 클라이언트 연결 요청을 받음.
while(true){
try(Socket socket = serverSocket.accept()){
System.out.println("client connected");
}
}
}
}
}
- 8000번 포트로 서버오픈
메시지 주고받기
Client
//server로 메시지 보냄
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
printWriter.println("client message")
printWriter.flush(); //flush를 해줘야 전송이 됨.
Server
//client에서 메시지 받기
InputStreamReader inputStreamReader = new InputStreamReader(socket.getInputStream());
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
System.out.println(bufferedReader.readLine());
- Client에
PrintWrite
를 추가해 메시지 전송 - Server에 받기위해서 Server에
InputStreamReader
,BufferReader
추가
Client
//Server에서 메시지 받아옴
InputStreamReader inputStreamReader = new InputStreamReader(socket.getInputStream());
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
System.out.println(bufferedReader.readLine());
Server
//Client로 메시지 전송
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
printWriter.println("server message");
printWriter.flush(); //flush를 해줘야 전송이 됨.
- Client에서 메시지를 받고 읽기위해서 Client에
InputStreamReader
,BufferReader
추가 - Server에
PrintWrite
를 추가해 메시지 전송
- 양방향 통신이 잘 되는 것을 볼 수 있음.
java.util.Scanner
를 사용해 간단한 채팅 프로그램 생성
//server와 client의 메시지 전송 부분에 scanner추가하여 채팅 가능
Scanner scanner = new Scanner(System.in);
String request = scanner.next();
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
printWriter.println(request);
scanner.close();
printWriter.flush();
- Client <-> Server간 메시지를 주고 받는 모습
- Client에 반복문을 추가하면 계속해서 서버와 통신할 수 있음.
채팅 구현까지 소스코드
Client
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class client{
//Local host 사용
static final String IPADDRESS = "127.0.0.1";
static final int PORTNUM = 8000;
public static void main(String[] args) throws IOException {
try(Socket socket = new Socket(IPADDRESS, PORTNUM)){
System.out.println("서버연결완료");
//server로 메시지 보냄
//Scanner를 통해 사용자 메시지 입력
Scanner scanner = new Scanner(System.in);
String request = scanner.next();
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
printWriter.println(request);
scanner.close();
printWriter.flush();
//Server에서 메시지 받아옴
InputStreamReader inputStreamReader = new InputStreamReader(socket.getInputStream());
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
System.out.println(bufferedReader.readLine());
}
}
}
Server
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class server{
//8000번 포트로 서버오픈
public static void main(String[] args) throws IOException{
try(ServerSocket serverSocket = new ServerSocket(8000)){
System.out.println("server open complete");
//클라이언트 연결
while(true){
try(Socket socket = serverSocket.accept()){
System.out.println("client connected");
//Client에서 메시지 받아옴
InputStreamReader inputStreamReader = new InputStreamReader(socket.getInputStream());
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
System.out.println(bufferedReader.readLine());
//Client로 메시지 전송
//Scanner를 통해 사용자 메시지 입력
Scanner scanner = new Scanner(System.in);
String request = scanner.next();
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
printWriter.println(request);
scanner.close();
printWriter.flush();
}
}
}
}
}
반응형
'컴퓨터네트워크' 카테고리의 다른 글
컴퓨터 네트워크 4-2 네트워크 계층 (0) | 2023.01.17 |
---|---|
[JAVA] 소캣 프로그래밍 HTTP 통신 구현 (1) | 2023.01.09 |
컴퓨터 네트워크 3-1 트랜스포트 계층 (1) | 2023.01.01 |
컴퓨터 네트워크 2-2 - 애플리케이션 계층 (0) | 2022.12.30 |
컴퓨터 네트워크 2-1 - 애플리케이션 계층 (1) | 2022.12.27 |