Java IO 패키지 정리 3 - socket 통신
자바 IO 패키지 예제 - git
자바 스레드 예제 - git
[1]서버소켓 예제
서버
package sec07.exam01.server_socket;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
ServerSocket serverSocket = null;
try {
//서버 소켓 객체 생성
serverSocket = new ServerSocket();
serverSocket.bind(new InetSocketAddress("localhost" , 5001));
while(true) {
System.out.println( "[연결 기다림]");
//연결 수락 후 소켓 생성
Socket socket = serverSocket.accept();
InetSocketAddress isa = (InetSocketAddress)socket.getRemoteSocketAddress();
System.out.println("[연결 수락함]" + isa.getHostName());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//서버 소켓이 안닫혀 있으면 닫아준다.
if(!serverSocket.isClosed()) {
try {
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/*
[연결 기다림]
[연결 수락함]localhost
[연결 기다림]
[연결 수락함]localhost
[연결 기다림]...
*/
클라이언트
package sec07.exam01.server_socket;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
public class ClientExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
Socket socket = null;
try {
//소캣 객체 생성
socket = new Socket();
System.out.println("[연결 요청]");
//연결
socket.connect(new InetSocketAddress("localhost" , 5001));
System.out.println("[연결 성공]");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//클라이언트 소켓이 안닫혔으면
if(!socket.isClosed()) {
try {
//클라이언트 소켓 닫기
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/*
[연결 요청]
[연결 성공]
*/
[2] 서버와 클라이언트 데이터 주고 받기
서버
package sec07.exam02.data_read_write;
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 ServerExample {
public static void main(String[] args) {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket();
serverSocket.bind(new InetSocketAddress("localhost" , 5000));
while(true) {
System.out.println("- 연결 기다림..");
Socket socket = serverSocket.accept();
InetSocketAddress isa = (InetSocketAddress)socket.getRemoteSocketAddress();
System.out.println("연결 수락함 : " + isa.getHostName());
//읽기 - 1
byte[] bytes = null;
String message = null;
//소켓으로 부터 입력 스트림 객체 생성
InputStream is = socket.getInputStream();
//읽은 데이터 담을 바이트 변수 생성
bytes = new byte[100];
//입력 스트림 읽기 - 100 바이트 씩
int readByteCount = is.read(bytes);
//바이트를 문자로 변환
message = new String(bytes, 0, readByteCount , "UTF-8");
System.out.println("- 데이터 받기 성공 : " + message);
//쓰기 - 2
//소켓으로 부터 출력 스트림 객체 생성
OutputStream os = socket.getOutputStream();
message = "hello client!";
bytes = message.getBytes("UTF-8");
os.write(bytes);
//내보내기
os.flush();
is.close();
os.close();
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
if(!serverSocket.isClosed()) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/*
- 연결 기다림..
연결 수락함 : localhost
- 데이터 받기 성공 : hi server!
- 연결 기다림..
연결 수락함 : localhost
- 데이터 받기 성공 : hi server - 안녕 서버!
- 연결 기다림..
*/
클라이언트
package sec07.exam02.data_read_write;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
public class ClientExample {
public static void main(String[] args) {
Socket socket = null;
try {
socket = new Socket();
System.out.println( "[연결 요청]");
socket.connect(new InetSocketAddress("localhost" , 5000));
System.out.println( "[연결 성공]");
//데이터 출력 준비
byte[] bytes = null;
String message = null;
//소켓으로 부터 출력 스트림 생성
OutputStream os = socket.getOutputStream();
message = "hi server - 안녕 서버!";
bytes = message.getBytes("UTF-8");
//출력 스트림에 데이터 쓰기
os.write(bytes);
//데이터 내보내기
os.flush();
System.out.println("데이터 보내기 성공");
//소켓으로 부터 입력 스트림 생성
InputStream is = socket.getInputStream();
bytes = new byte[100];
//입력 스트림으로 부터 바이트 읽기
int readByteCount = is.read(bytes);
//읽은 바이트 문자열로 변환
message = new String(bytes, 0, readByteCount);
System.out.println("데이터 받기 성공 : " + message);
os.close();
is.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//소켓 닫기
if(!socket.isClosed()) {
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/*
[연결 요청]
[연결 성공]
데이터 보내기 성공
데이터 받기 성공 : hello client!
*/
참고
willbfine.tistory.com/413?category=835334
'웹개발 > Java' 카테고리의 다른 글
자바의 변수와 메서드는 메모리에 어떻게 표시될까 2 (0) | 2022.10.06 |
---|---|
자바의 변수와 메서드는 메모리에 어떻게 표시될까 1 (1) | 2022.10.05 |
기계어부터 객체지향에 이르기까지 정리 (0) | 2022.10.04 |
Java IO 패키지 정리 2 - 보조스트림 (0) | 2021.03.17 |
Java IO 패키지 정리 1 (0) | 2021.03.17 |