シンプルなTCPサーバのサンプルです。
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketException; public class TcpServer { private static final int DEFOULT_PORT = 1000; private ServerSocket server; public TcpServer() throws IOException { this(DEFOULT_PORT); } public TcpServer(int port) throws IOException { this.server = new ServerSocket(port); } public void start() { new Thread() { @Override public void run() { while(true) { try { Socket socket = server.accept(); // block new Thread(new ConnectionHandler(socket)).start(); } catch (IOException e) { e.printStackTrace(); } } } }.start(); } class ConnectionHandler implements Runnable { private final Socket socket; public ConnectionHandler(final Socket socket) { this.socket = socket; } @Override public void run() { System.out.println("accepted " + socket.getInetAddress() + ":" + socket.getPort()); try { socket.setTcpNoDelay(true); } catch (SocketException e) { // do nothing } try { handleConversation(); } finally { try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } void handleConversation() { try { InputStream in = new BufferedInputStream(socket.getInputStream()); OutputStream out = new BufferedOutputStream(socket.getOutputStream()); byte[] buffer = new byte[8192]; int count; while((count = in.read(buffer)) >= 0) { System.out.println("received " + count + " bytes from " + socket.getInetAddress() + ":" + socket.getPort()); System.out.println(new String(buffer).trim()); out.write(buffer, 0, count); out.flush(); } socket.shutdownOutput(); // half close } catch(IOException e) { e.printStackTrace(); } } } public static void main(String[] args) throws Exception { TcpServer tcpServer = new TcpServer(); tcpServer.start(); } }
telnetなどで接続するとエコーします。
telnet localhost 1000
やっつけです・・