클라이언트에서 서버로 문자열을 보내면, 서버에서 해당 문자열을 아스키 코드로 변환 후 클라이언트에게 전송.
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws IOException {
int portNumber = 2023;
String serverIP="127.0.0.1"; // localhost
try{
Socket socket = new Socket(serverIP, portNumber);
System.out.println("서버에 연결되었습니다.");
// 문자열로 받기 위해 Scanner
Scanner in = new Scanner(new InputStreamReader(socket.getInputStream()));
// 문자열 보내기 위해 PrintWriter
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
Scanner input = new Scanner(System.in);
System.out.print("서버로 보낼 메세지 : ");
String message = input.next();
// 서버로 메세지 보냄
out.println(message);
System.out.println("서버로 보낸 메시지: " + message);
String response = in.nextLine();
System.out.println("서버로부터 받은 메시지(아스키 코드): " + response);
socket.close();
}catch (IOException e) { // 예외처리
System.out.println("연결 실패");
e.printStackTrace();
}
}
}
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class Server {
public static void main(String[] args) throws IOException {
// 서버 소켓 생성 및 포트 번호 지정
ServerSocket serverSocket = new ServerSocket();
serverSocket.setReuseAddress(true);
serverSocket.bind(new InetSocketAddress("localhost", 2023));
System.out.println("서버가 시작되었습니다.");
// 클라이언트 연결 대기
serverSocket.setSoTimeout(10000);
System.out.println("클라이언트 연결 대기중...");
Socket clientSocket = serverSocket.accept();
System.out.println("클라이언트와 연결되었습니다.");
// 문자열로 받기 위해 Scanner
Scanner in = new Scanner(new InputStreamReader((clientSocket.getInputStream())));
// 문자열 보내기 위해 PrintWriter
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
// 클라이언트로부터 메시지 받기
String message = in.nextLine();
System.out.println("클라이언트로부터 받은 메시지: " + message);
// 받은 메세지를 아스키코드화해서 StringBuilder asciiString에 넣기
StringBuilder asciiString = new StringBuilder();
for (int i = 0; i < message.length(); i++) {
int ascii = (int) message.charAt(i);
asciiString.append(ascii);
asciiString.append(" "); //코드 간 구분 가시화를 위한 공백
}
// 클라이언트로 아스키 코드 메시지 보내기
out.println(asciiString.toString());
System.out.println("클라이언트로 보낸 메시지(아스키 코드): " + asciiString.toString());
// 소켓 및 서버 소켓 닫기
clientSocket.close();
serverSocket.close();
}
}
서버측은 붉은색, 클라이언트 측은 푸른색으로 표시하였습니다.
서버 오픈

클라이언트 오픈

클라이언트 오픈 후 서버 상태

클라이언트에서 서버로 문자열 전송 & 완료

완료 후 서버 상태


코드표를 확인해 보면,
D : 68
a : 97
n : 110
k : 107
o : 111
o : 111
k : 107
U : 85
n : 110
i : 105
v : 118
로 올바르게 전송된 것을 확인할 수 있다.
Scanner 대신 BufferedReader를 쓰는 것이 속도가 더 빠르다.

아래는 Scanner대신 BufferedReader를 쓴 개선 버전.
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws IOException {
int portNumber = 2023;
String serverIP="127.0.0.1"; //localhost
try{
Socket socket = new Socket(serverIP, portNumber);
System.out.println("서버에 연결되었습니다.");
//문자열로 받기 위해 BufferedReader
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//문자열 보내기 위해 PrintWriter
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
Scanner input = new Scanner(System.in);
System.out.print("서버로 보낼 메세지 : ");
String message = input.next();
out.println(message);
System.out.println("서버로 보낸 메시지: " + message);
String response = in.readLine();
System.out.println("서버로부터 받은 메시지(아스키 코드): " + response);
socket.close();
}catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("연결 실패");
e.printStackTrace();
}
}
}
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
// 서버 소켓 생성 및 포트 번호 지정
ServerSocket serverSocket = new ServerSocket();
serverSocket.setReuseAddress(true);
serverSocket.bind(new InetSocketAddress("localhost", 2023));
System.out.println("서버가 시작되었습니다.");
// 클라이언트 연결 대기
serverSocket.setSoTimeout(10000);
System.out.println("클라이언트 연결 대기중...");
Socket clientSocket = serverSocket.accept();
System.out.println("클라이언트와 연결되었습니다.");
//문자열로 받기 위해 BufferedReader
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
//문자열 보내기 위해 PrintWriter
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
String message = in.readLine();
System.out.println("클라이언트로부터 받은 메시지: " + message);
StringBuilder asciiString = new StringBuilder();
for (int i = 0; i < message.length(); i++) {
int ascii = (int) message.charAt(i);
asciiString.append(ascii);
asciiString.append(" ");
}
out.println(asciiString);
System.out.println("클라이언트로 보낸 메시지(아스키 코드): " + asciiString);
clientSocket.close();
serverSocket.close();
}
}
좌측이 클라이언트, 우측이 서버

의도대로 동작함을 확인할 수 있습니다.
파일 : 깃허브 링크