서버소켓 클래스
- 이름만 서버소켓이지 단순한 소켓이다
- 가장 중요한 기능
0. accept요청을 대기하다가 연결을 받게 된다
1. 새로운 소켓 생성
2. 서버 소켓과 연결된 선을 끊는다 (기존 소켓을 없애는게 아니다?)
3. 새로운 클라이언트 소켓에 연결
4. 다시 accept 요청을 대기
소켓이 만들어 질 때 마다 새로운 스레드가 필요하다
package ch15;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class MySocketServer {
ServerSocket serverSocket;
Socket socket;
public MySocketServer() {
try {
serverSocket = new ServerSocket(15000); // 서버 소켓 생성 (연결을 받는)
socket = serverSocket.accept(); // 요청을 대기 - 연결이 되면 소켓을 리턴하고 서버소켓에 연결된 선을 끊는다
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = "";
while ((msg = br.readLine()) != null) {
System.out.println("sender : " + msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
}
}
package ch15;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class MySocketServer {
ServerSocket serverSocket;
Socket socket;
BufferedReader br;
public MySocketServer() {
try {
serverSocket = new ServerSocket(15000); // 서버 소켓 생성 (연결을 받는)
socket = serverSocket.accept(); // 요청을 대기 - 연결이 되면 소켓을 리턴하고 서버소켓에 연결된 선을 끊는다
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = "";
while ((msg = br.readLine()) != null) {
System.out.println("sender : " + msg);
}
} catch (Exception e) { // 소켓연결이 끊기면 catch로 와지면서 while을 벗어나게 된다
e.printStackTrace();
}
try {
br.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
}
}
package ch15;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class MySocketServer {
ServerSocket serverSocket;
Socket socket;
BufferedReader br;
// throws는 함수의 모든 내용이 try catch가 필요한 경우 사용하면 된다
public MySocketServer() throws Exception { // throws 는 함수를 호출한 자에게 던지는 것이다
serverSocket = new ServerSocket(15000); // 서버 소켓 생성 (연결을 받는)
socket = serverSocket.accept(); // 요청을 대기 - 연결이 되면 소켓을 리턴하고 서버소켓에 연결된 선을 끊는다
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = "";
while ((msg = br.readLine()) != null) {
System.out.println("sender : " + msg);
}
br.close();
socket.close();
serverSocket.close();
}
public static void main(String[] args) {
try { // main이 함수를 호출 했기 때문에 여기서 트라이캐치를 사용
new MySocketServer();
} catch (Exception e) {
// TODO: handle exception
}
}
}
package ch15;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class MySocketServer {
ServerSocket serverSocket;
Socket socket;
BufferedReader br;
// throws는 함수의 모든 내용이 try catch가 필요한 경우 사용하면 된다
public MySocketServer() throws Exception { // throws 는 함수를 호출한 자에게 던지는 것이다
serverSocket = new ServerSocket(15000); // 서버 소켓 생성 (연결을 받는)
socket = serverSocket.accept(); // 요청을 대기 - 연결이 되면 소켓을 리턴하고 서버소켓에 연결된 선을 끊는다
System.out.println("요청이 들어옴");
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = "";
while ((msg = br.readLine()) != null) {
System.out.println("sender : " + msg);
}
br.close();
socket.close();
serverSocket.close();
}
public static void main(String[] args) {
try { // main이 함수를 호출 했기 때문에 여기서 트라이캐치를 사용
new MySocketServer();
} catch (Exception e) {
// TODO: handle exception
}
}
}
package ch15;
import java.io.PrintWriter;
import java.net.Socket;
public class MySocketClient {
Socket socket;
public MySocketClient() throws Exception {
socket = new Socket("localhost", 15000); // 서버소켓의 accept() 함수를 호출
//"localhost" 또는 127.0.0.1 는 약속된 내용
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true); // autoFlush기능이 있다
}
public static void main(String[] args) {
try {
new MySocketClient();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package ch15;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class MySocketServer {
ServerSocket serverSocket; // 서버소켓은 연결요청을 대기하다가 연결이 되면 소켓을 리턴하고 서버소켓에 연결된 선을 끊는다
Socket socket; // 서버소켓이 리턴한 소켓을 받는 역할
BufferedReader br; // 스트림이 연결되면 BufferedReader로 데이터를 받는다
// throws는 함수의 모든 내용이 try catch가 필요한 경우 사용하면 된다
public MySocketServer() throws Exception { // throws 는 함수를 호출한 자(여기서는 main)에게 던지는 것이다
serverSocket = new ServerSocket(15000); // 서버 소켓 생성 (연결을 받는)
socket = serverSocket.accept(); // 요청을 대기 - 연결이 되면 소켓을 리턴하고 서버소켓에 연결된 선을 끊는다
System.out.println("요청이 들어옴");
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = "";
while ((msg = br.readLine()) != null) { // br로 데이터를 받고 msg에 넣은 후 null값인지 확인한다
System.out.println("상대방 : " + msg); // 받은 메시지를 출력한다
}
// 사용이 끝난 인스턴스를 닫는다
br.close();
socket.close();
serverSocket.close();
}
public static void main(String[] args) {
try { // main이 함수를 호출 했기 때문에 여기서 트라이캐치를 사용
new MySocketServer(); // 소켓서버 가동 메서드 실행;
} catch (Exception e) {}
}
}
package ch15;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class MySocketClient {
Socket socket; // 소켓 생성
BufferedReader br; // 키보드로 내가 입력한 메시지를 받기위한 br
BufferedWriter bw; // 내가 입력한 메시지를 소켓으로 보내기 위한 bw
public MySocketClient() throws Exception {
//스트림
//"localhost" 또는 127.0.0.1 는 약속된 내용 - 내 컴퓨터의 내부 주소
socket = new Socket("192.168.0.115", 15000); // 서버소켓의 accept() 함수를 호출
// 소켓 - 버퍼드라이터 연결
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
// 키보드 - 버퍼드리더 연결
br = new BufferedReader(new InputStreamReader(System.in));
String msg = "";
// 키보드로 입력한 메시지를 확인하여 null이 아니면 bw에 적고 flush
while ((msg = br.readLine()) != null) {
bw.write(msg + "\n"); // "\n"은 상대방 소켓에서 읽어들이기 위해서 필요한 것이라 넣은 것
System.out.println("내 메시지 : " + msg);
bw.flush(); // 버퍼는 꽉차지 않으면 플러시 되지 않기 때문에 수동으로 플러시 시켜준다
}
// 인스턴스 닫기
bw.close();
br.close();
socket.close();
}
public static void main(String[] args) {
try {
new MySocketClient(); // 클라이언트 메서드 실행
} catch (Exception e) {
e.printStackTrace();
}
}
}
'Programming Language > Java' 카테고리의 다른 글
자바 채팅 프로그램2 (0) | 2020.04.14 |
---|---|
자바 finally (0) | 2020.04.14 |
200414 // 통신 - 모스키토, 브로드캐스트, 블루투스, 소켓 (0) | 2020.04.14 |
200413 멀티프로세싱, 쓰레드, 문맥교환, IPC, 콜백, 익명클래스 (0) | 2020.04.13 |
자바 기본자료형 클래스자료형 차이 이해하기 (0) | 2020.04.11 |