반응형
Server.java
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(); //서버소켓 객체 생성. client의 접속요청 받는 소켓
server.bind(new InetSocketAddress("localhost", 6000)); //서버소켓 객체 메소드. 바인드, 5000=소켓 address port number
System.out.println("Server start...");
Socket socket = server.accept(); //client가 connect 호출할 때까지 block(대기) 상태
System.out.println("Connected"); //여기부터 client와 통신 내용
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
DataInputStream dis = new DataInputStream(is);
DataOutputStream dos = new DataOutputStream(os);
String str = dis.readUTF(); //문자열 읽어들이기. client가 write할 때까지 대기
int value = dis.readInt();
System.out.println(str);
System.out.println(value); //통신 내용 종료
socket.close();
server.close();
}
}
코드 설명
서버 소켓 생성 및 바인딩
ServerSocket server = new ServerSocket();
server.bind(new InetSocketAddress("localhost", 6000));
접속 대기
Socket socket = server.accept();
- accept(): 연결 요청이 오면 새로운 Socket 객체 반환
- 새로 만들어진 Socket 객체를 통해 클라이언트와 통신
- ServerSocket 클래스는 Socket 클래스와 달리 주어진 연결에 대해 입출력 스트림을 만들어주는 메소드가 없음
네트워크 입출력 스트림 생성
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
DataInputStream dis = new DataInputStream(is);
DataOutputStream dos = new DataOutputStream(os);
- accept() 메소드에서 얻은 Socket 객체의 getInputStream()과 getOutputStream() 메소드를 이용하여 데이터 스트림 생성
- 일반 스트림 입출력 방식과 동일하게 네트워크 데이터 입출력
클라이언트로부터 데이터 수신
String str = dis.readUTF();
int value = dis.readInt();
//클라이언트로 데이터 전송
//dos.writeInt(1000);
readUTF / readInt : 블로킹 함수. client가 connect 호출할 때까지 block(대기) 상태 유지
네트워크 접속 및 서버 응용프로그램 종료
socket.close();
server.close();
Client.java
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket(); //일반 소켓
socket.connect(new InetSocketAddress("localhost", 6000)); //accept() 상태에서 대기 중인 서버소켓을 awake. 접속하고자 하는 소켓의 ip주소와 port number
System.out.println("Connect");
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
DataInputStream dis = new DataInputStream(is);
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF("map"); //쓰기. server의 dis.readUTF와 대응
dos.writeInt(2021); //쓰기. server의 dis.readInt와 대응
socket.close();
}
}
코드 설명
쿨라이언트 소켓 생성 및 서버에 접속
Socket socket = new Socket();
socket.connect(new InetSocketAddress("localhost", 6000));
소켓으로부터 데이터를 전송할 입출력 스트림 생성
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
DataInputStream dis = new DataInputStream(is);
DataOutputStream dos = new DataOutputStream(os);
서버로 데이터 전송
dos.writeUTF("map");
dos.writeInt(2021);
네트워크 접속 종료
socket.close();
실행화면
반응형
'프로그래밍 > Java' 카테고리의 다른 글
[자바]채팅 프로그램(여러 사용자 동시 접속) (0) | 2021.08.19 |
---|---|
뉴렉처 자바 JDBC 프로그래밍 강의 내용 정리 19-24강 (0) | 2021.08.17 |
뉴렉처 자바 JDBC 프로그래밍 강의 내용 정리 9-18강 (0) | 2021.08.16 |
뉴렉처 자바 JDBC 프로그래밍 강의 내용 정리 1-8강 (0) | 2021.08.16 |
[자바] 배열 역순 출력 (0) | 2020.11.09 |
[자바] 은행 프로그램(잔액 조회, 인출)(while문 활용) (0) | 2020.11.09 |