6-1.(2) 네트워킹_TCP Socket ServerSocket
TCP vs UDP
- TCP/IP의 전송계층에서 사용되는 프로토콜
- 전송계층은 IP에 의해 전달되는 패킷의 오류를 검사하고 재전송 요구 등의 제어를 담당
- 신뢰성이 요구되는 애플리케이션은 TCP를 사용
- 간단한 데이터를 빠른 속도로 전송(UDP는 비연결지향형이라서) 하고자 하는 애플리케이션에서는 UDP를 사용
TCP
- 자바는 TCP 네트워킹을 위해 Socket & ServerSocket 클래스를 제공
- 연결 지향형 프로토콜
TCP 구현을 위한 클래스들
- InetAddress클래스
- URL, URLConnection 클래스
- Socket & ServerSocket 클래스
Socket / SeverSocket클래스
Socket클래스
- Client가 Server로 연결요청을 한다.
- 커뮤니케이션을 위해 사용하는 양 끝단을 Socket (ex. 대화창, 파일전송)
- 데이터 전송을 담당
- 인터넷 연결
Socket클래스 주요생성자
생성자 | 설명 |
---|---|
Socket(InetAddress address, int prot) | InetAdress 객체와 port를 이용하여 Socket객체를 생성 |
Socket(String host, int port) | host와 port를 이용하여 Socket 객체를 생성 |
Socket클래스 주요메서드
반환형 | 메서드 | 설명 |
---|---|---|
void | close() | 소켓 객체를 담는다 |
InetAdress | getInetAdress() | 소켓 객체를 InetAdress객체로 반환 |
InputStream | getInputStream() | 소켓 객체로부터 입력할 수 있는 InputStream객체를 반환 |
InetAdress | getLocalAddress() | 소켓 객체의 로컬 주소를 반환 |
int | getPort() | 소켓 객체의 포트를 반환한다 |
boolean | isClosed() | 소켓 객체가 닫혀있으면 true를 반환, 열려있으면 false를 반환 |
boolean | isConnection() | 소켓객체가 연결되어 있으면 true, 연결되어 있지 않으면 false를 반환 |
ServerSocket 클래스
- 서버 프로그램에서 사용하는 소켓
- 포트를 통해 연결 요청이 오길 대기
- 요청이 오면 클라이언트와 연결을 맺고 또 다른 소켓을 만드는 일을 한다.
- 새로 만들어진 소켓은 클라이언트 소켓과 데이터를 주고 받는다.
ServerSocket 클래스 주요 생성자
생성자 | 설명 |
---|---|
ServerSocket(int port) | port를 이용하여 ServerSocket객체를 생성 |
ServerSocket 클래스 주요 메서드
반환형 | 메서드 |
---|---|
Socket | accept() |
void | close() |
int | getLocalPort() |
int | getSoTimeout() |
boolean | isClosed() |
boolean | setSoTimeout(int timeout) |
TCP 소켓 서버(Server) 프로그래밍
- 동작과정
- TCP 소켓통신을 하기 위해 ServerSocket객체 생성 : port번호를 갖고 생성
- ServerSocket객체의 accept()메서드를 호출하여 Client로부터 연결요청이 올 때까지 계속 기다린다
- 연결 요청이 들어오면 새로운 Socket객체를 생성하여 Client의 Socket과 연결
- Socket객체의 Stream객체(InputStream,OuputStream)을 이용하여 메세지를 주고 받는다.
- 사용이 완료된 소켓은 close()메서드를 이용하여 종료 처리한다
- 예제 6.JavaNetworkTest / T01_TcpServer
public class T01_TcpServer {
public static void main(String[] args) throws IOException {
//20.10.13
//1. TCP소켓 통신을 하기 위한 ServerSocket객체 생성
//ServerSocket을 생성할 때 포트번호 하나를 지정해야 한다.
ServerSocket server = new ServerSocket(7777); // (port번호 ~ 1024번까지 쓰면안됨)
System.out.println("서버가 접속을 기다립니다...");
//accept()메서드 Client에서 연결요청이 올때까지 계속 기다린다.
//연결 요쳥이 오면 Socket객체를 생성해서 Client의 Socket과 연결한다.
Socket socket = server.accept(); // accept() : 블락상태 -> 쓰레드로 치면 wait 상태
// 클라이언트가 포트번호 7777로 연결요청이 올때가지 대기
// ServerSocket이 Socket을 만듦
//--------------------------------------------
//이 이후는 클라이언트와 연결된 후의 작업을 진행하면 된다.
//>>>>main쓰레드 시작
System.out.println("접속한 클라이언트 정보");
System.out.println("주소 : "+ socket.getInetAddress()); //해당 객체 정보 (인터넷 주소) to String() 호출
//Client에 메시지 보내기
//OutputStream객체를 구성하여 전송한다.
//접속한 Socket의 goOutputStream()메서드를 이용하여 구한다.
OutputStream out = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(out); //outputstream 객체 'out' 담음
dos.writeUTF("어서 오세요...");//메시지 보내기
System.out.println("메시지를 보냈습니다.");
dos.close(); //스트림 객체 닫아줌
server.close(); //소켓도 닫아줌 >> 자원반납
}//main
}//class
TCP 소켓 클라이언트(Client) 프로그래밍
- 동작과정
- Socket 객체를 생성하여 서버에 연결 요청을 하다 : 자신의 IP주소와 Port번호를 갖고!
- 연결이 정상적으로 이루어 지면 생성된 Socket객체를 이용하여 서버와 메세지를 주고 받는다.
- 생성된 Socket 객체로부터 스트림(InputStream, OutputStream)객체를 가져와 이용함
- 사용이 완료된 소켓은 close()메서드를 이용하여 종료처리한다.
public class T02_TcpClient {
public static void main(String[] args) throws IOException {
String serverIp = "127.0.0.1"; // 루프백 주소?
//자기 자신 컴퓨터를 나타내는 방법
//IP : 127.0.0.1
//컴이름 : localhost
System.out.println(serverIp + " 서버에 접속 중입니다.");
//'소켓을 생성'해서 서버에 연결을 요청한다.
Socket socket = new Socket(serverIp, 7777); //다른 서버로 접속 시도
//객체가 만들어질때까지 대기상태
//연결이 되면 이후의 명령이 실행된다.
System.out.println("연결되었습니다.");
//서버에 보내온 메시지 받기
//메시지를 받기 위해 InputStream객체를 생성한다.
//Socket의 getInputStream()메서드 이용
InputStream is = socket.getInputStream();
DataInputStream dis = new DataInputStream(is);
//서버로부터 받은 메시지 출력하기
System.out.println("받은 메시지 : "+ dis.readUTF());
System.out.println("연결종료.");
//T01_TcpServer 클래스 Console창 켜놓고 지금 창 Console창 실행해야댐
dis.close();
socket.close();
}
}
Author And Source
이 문제에 관하여(6-1.(2) 네트워킹_TCP Socket ServerSocket), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@zhyun1220/6-1.2-네트워킹TCP-Socket-ServerSocket
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- TCP 소켓통신을 하기 위해 ServerSocket객체 생성 : port번호를 갖고 생성
- ServerSocket객체의 accept()메서드를 호출하여 Client로부터 연결요청이 올 때까지 계속 기다린다
- 연결 요청이 들어오면 새로운 Socket객체를 생성하여 Client의 Socket과 연결
- Socket객체의 Stream객체(InputStream,OuputStream)을 이용하여 메세지를 주고 받는다.
- 사용이 완료된 소켓은 close()메서드를 이용하여 종료 처리한다
public class T01_TcpServer {
public static void main(String[] args) throws IOException {
//20.10.13
//1. TCP소켓 통신을 하기 위한 ServerSocket객체 생성
//ServerSocket을 생성할 때 포트번호 하나를 지정해야 한다.
ServerSocket server = new ServerSocket(7777); // (port번호 ~ 1024번까지 쓰면안됨)
System.out.println("서버가 접속을 기다립니다...");
//accept()메서드 Client에서 연결요청이 올때까지 계속 기다린다.
//연결 요쳥이 오면 Socket객체를 생성해서 Client의 Socket과 연결한다.
Socket socket = server.accept(); // accept() : 블락상태 -> 쓰레드로 치면 wait 상태
// 클라이언트가 포트번호 7777로 연결요청이 올때가지 대기
// ServerSocket이 Socket을 만듦
//--------------------------------------------
//이 이후는 클라이언트와 연결된 후의 작업을 진행하면 된다.
//>>>>main쓰레드 시작
System.out.println("접속한 클라이언트 정보");
System.out.println("주소 : "+ socket.getInetAddress()); //해당 객체 정보 (인터넷 주소) to String() 호출
//Client에 메시지 보내기
//OutputStream객체를 구성하여 전송한다.
//접속한 Socket의 goOutputStream()메서드를 이용하여 구한다.
OutputStream out = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(out); //outputstream 객체 'out' 담음
dos.writeUTF("어서 오세요...");//메시지 보내기
System.out.println("메시지를 보냈습니다.");
dos.close(); //스트림 객체 닫아줌
server.close(); //소켓도 닫아줌 >> 자원반납
}//main
}//class
- Socket 객체를 생성하여 서버에 연결 요청을 하다 : 자신의 IP주소와 Port번호를 갖고!
- 연결이 정상적으로 이루어 지면 생성된 Socket객체를 이용하여 서버와 메세지를 주고 받는다.
- 생성된 Socket 객체로부터 스트림(InputStream, OutputStream)객체를 가져와 이용함
- 사용이 완료된 소켓은 close()메서드를 이용하여 종료처리한다.
public class T02_TcpClient {
public static void main(String[] args) throws IOException {
String serverIp = "127.0.0.1"; // 루프백 주소?
//자기 자신 컴퓨터를 나타내는 방법
//IP : 127.0.0.1
//컴이름 : localhost
System.out.println(serverIp + " 서버에 접속 중입니다.");
//'소켓을 생성'해서 서버에 연결을 요청한다.
Socket socket = new Socket(serverIp, 7777); //다른 서버로 접속 시도
//객체가 만들어질때까지 대기상태
//연결이 되면 이후의 명령이 실행된다.
System.out.println("연결되었습니다.");
//서버에 보내온 메시지 받기
//메시지를 받기 위해 InputStream객체를 생성한다.
//Socket의 getInputStream()메서드 이용
InputStream is = socket.getInputStream();
DataInputStream dis = new DataInputStream(is);
//서버로부터 받은 메시지 출력하기
System.out.println("받은 메시지 : "+ dis.readUTF());
System.out.println("연결종료.");
//T01_TcpServer 클래스 Console창 켜놓고 지금 창 Console창 실행해야댐
dis.close();
socket.close();
}
}
Author And Source
이 문제에 관하여(6-1.(2) 네트워킹_TCP Socket ServerSocket), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@zhyun1220/6-1.2-네트워킹TCP-Socket-ServerSocket저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)