반응형
JAVA로 소켓통신을 하기 위한 가장 심플한 코드입니다. 아래 코드는 서버를 실행하면 소켓이 열리고, 클라이언트를 따로 실행하여 메시지를 보내면 소켓에 저장됩니다. 소켓에 저장된 내용을 클라이언트에 뿌려주는 방식입니다.
단순히 메시지를 송/수신하여 확인하는것으로 아직 별다른 기능이 구현되어 있지 않지만, 이 기본코드를 통해서 앞으로 기능들을 추가할 생각입니다.
◇ 서버 출력 결과 / 소스
package socket.server;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleServer {
public static void main(String[] args) throws IOException{
SimpleServer ss = new SimpleServer();
ss.ServerRun();
}
public void ServerRun() throws IOException{
ServerSocket server = null;
int port = 4200;
Socket socket = null;
InputStream is = null;
InputStreamReader isr = null;
BufferedReader br = null;
try{
server = new ServerSocket(port);
while(true){
System.out.println("-------접속 대기중------");
// 클라이언트가 접속하면 통신할 수 있는 소켓 반환
socket = server.accept();
System.out.println(socket.getInetAddress() + "로 부터 연결요청이 들어옴");
is = socket.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
// 클라이언트로부터 데이터를 받기 위한 InputStream 선언
String data=null;
data=br.readLine();
System.out.println("클라이언트로 부터 받은 데이터:" + data);
receiveData(data, socket);
// 받은 데이터를 그대로 다시 보내기
System.out.println("****** 전송 완료 ****");
}
}catch (Exception e) {
e.printStackTrace();
}finally {
try{
br.close();
isr.close();
is.close();
server.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
public void receiveData(String data, Socket socket){
OutputStream os = null;
OutputStreamWriter osw = null;
BufferedWriter bw = null;
try{
os = socket.getOutputStream();
osw = new OutputStreamWriter(os);
bw = new BufferedWriter(osw);
// 클라이언트로부터 데이터를 보내기 위해 OutputStream 선언
bw.write(data); // 클라이언트로 데이터 전송
bw.flush();
}catch(Exception e1){
e1.printStackTrace();
}finally {
try{
bw.close();
osw.close();
os.close();
socket.close();
}catch(Exception e1){
e1.printStackTrace();
}
}
}
}
◇ 클라이언트 출력 결과 / 소스
package client;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class SimpleClient{
public static void main(String[] args) throws IOException{
SimpleClient cm = new SimpleClient();
cm.ClientRun("Message Test+++Message Test+++Message Test");
}
public void ClientRun(String data){
Socket socket = null;
OutputStream os = null;
OutputStreamWriter osw =null;
BufferedWriter bw = null;
InputStream is =null;
InputStreamReader isr = null;
BufferedReader br = null;
try{
socket = new Socket("172.16.117.129", 4200);
os = socket.getOutputStream();
osw = new OutputStreamWriter(os);
bw = new BufferedWriter(osw); //서버로 전송을 위한 OutputStream
is = socket.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr); // 서버로부터 Data를 받음
bw.write(data);
bw.newLine();
bw.flush();
String receiveData = "";
receiveData = br.readLine(); // 서버로부터 데이터 한줄 읽음
System.out.println("서버로부터 받은 데이터 : " + receiveData);
}catch(Exception e){
e.printStackTrace();
}finally {
try{
bw.close();
osw.close();
os.close();
br.close();
isr.close();
is.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
반응형
'프로그래밍 > Java' 카테고리의 다른 글
JAVA|CRC-32 계산 예제 (Polynomial 설정) (0) | 2023.07.11 |
---|---|
자바(Java)〃FileOutputStream으로 파일 복사 (0) | 2016.01.23 |
자바(Java)〃FileInputStream으로 파일 읽기 (0) | 2016.01.23 |
자바(Java)〃파일클래스의 디렉토리 메소드 (0) | 2016.01.22 |
자바(Java)〃입력 스트림 & 출력 스트림 (0) | 2016.01.22 |
자바(Java)〃알고리즘으로 숫자 삼각형으로 나열하기 (0) | 2016.01.21 |
자바(Java)〃알고리즘으로 숫자를 세로로 나열하기 (0) | 2016.01.21 |
자바(Java)〃피보나치 수열 구하기 (0) | 2016.01.20 |