TCP 서버
package test;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
public class TCPServer {
public static void main(String[] args) {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket();
serverSocket.bind(new InetSocketAddress("0.0.0.0", 5000));
Socket socket = serverSocket.accept();
InetSocketAddress inetRemoteSocketAddress = (InetSocketAddress) socket.getRemoteSocketAddress();
String remoteHostAddress = inetRemoteSocketAddress.getAddress().getHostAddress();
int remoteHostPort = inetRemoteSocketAddress.getPort();
System.out.println("[server] connected by client[" + remoteHostAddress + ":" + remoteHostPort + "]");
try {
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
while (true) {
byte[] buffer = new byte[256];
int readByteCount = is.read(buffer);
if (readByteCount == -1) {
System.out.println("[server] closed by Client");
break;
}
String data = new String(buffer, 0, readByteCount, "utf-8");
System.out.println("[server] received:" + data);
os.write(data.getBytes("utf-8"));
}
} catch (SocketException e) {
System.out.println("[server] suddenly closed by client" + e);
} catch (IOException e) {
System.out.println("[server] error" + e);
} finally {
try {
if (socket != null && socket.isClosed() == false) {
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
System.out.println("[server] error : " + e);
} finally {
try {
if (serverSocket != null && serverSocket.isClosed() == false) {
serverSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
TCP 클라이언트
package test;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketException;
public class TCPClient {
private static final String SERVER_IP = "127.0.0.1";
private static final int SERVER_PORT = 5000;
public static void main(String[] args) {
Socket socket =null;
try {
socket = new Socket();
socket.connect(new InetSocketAddress(SERVER_IP,SERVER_PORT));
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
String data = "Hello World";
os.write(data.getBytes("UTF-8"));
byte[] buffer = new byte[256];
int readByteCount = is.read(buffer);
if (readByteCount == -1) {
System.out.println("[Client] closed by server");
}
data = new String(buffer, 0, readByteCount, "UTF-8");
System.out.println("[client] received:" + data);
} catch (SocketException e) {
System.out.println("[client] suddenly close by server : " + e);
} catch (IOException e) {
System.out.println("[client] error : " + e);
}finally {
try {
if (socket != null && socket.isClosed() == false) {
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
에코 서버
package echo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class EchoServer {
private static final int PORT = 6000;
public static void main(String[] args) {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket();
serverSocket.bind(new InetSocketAddress("0.0.0.0", PORT));
log("starts... [port:" + PORT + "]");
Socket socket = serverSocket.accept();
InetSocketAddress inetRemoteSocketAddress = (InetSocketAddress) socket.getRemoteSocketAddress();
String remoteHostAddress = inetRemoteSocketAddress.getAddress().getHostAddress();
int remoteHostPort = inetRemoteSocketAddress.getPort();
log("connected by client[" + remoteHostAddress + ":" + remoteHostPort + "]");
try {
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"), true);
while (true) {
String data = br.readLine();
if (data == null) {
log("closed by client");
break;
}
log("received:" + data);
pw.println(data);
}
} catch (IOException e) {
log("error:" + e);
} finally {
try {
if (socket != null && socket.isClosed() == false) {
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
log("error: " + e);
} finally {
try {
if (serverSocket != null && serverSocket.isClosed() == false) {
serverSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void log(String log) {
System.out.println("[EchoServer] " + log);
}
}
에코 클라이언트
package echo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketException;
import java.util.Scanner;
public class EchoClient {
private static final String SERVER_IP = "127.0.0.1";
private static final int SERVER_PORT = 6000;
public static void main(String[] args) {
Socket socket = null;
Scanner scanner = null;
try {
scanner = new Scanner(System.in);
socket = new Socket();
socket.connect(new InetSocketAddress(SERVER_IP, SERVER_PORT));
log("connected");
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"), true);
while(true) {
System.out.print(">");
String line = scanner.nextLine();
if("exit".equals(line)){
break;
}
pw.println(line);
String data = br.readLine();
if(data == null) {
log("closed by server");
break;
}
System.out.println("<" + data);
}
}catch(SocketException e) {
log("suddenly closed by server");
}catch(IOException e) {
log("error:" + e);
}finally {
try {
if(scanner != null) {
scanner.close();
}
if(socket != null && socket.isClosed() == false) {
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
private static void log(String log) {
System.out.println("[Echo Client] " + log);
}
}