服务器端代码(单线程):
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class TalkServer { public static void main(String[] args) { ServerSocket server = null; try { server = new ServerSocket(4700); } catch (IOException e) { System.out.println("Can not listen 4700."); } Socket socket = null; try { socket = server.accept(); } catch (IOException e) { e.printStackTrace(); } String line; try { BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter printWriter = new PrintWriter(socket.getOutputStream()); BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Client:" + reader.readLine()); line = sysin.readLine(); while (!line.equals("bye")) { printWriter.print(line); printWriter.flush(); System.out.println("Server:" + line); System.out.println("Client:" + reader.readLine()); line = sysin.readLine(); } reader.close(); sysin.close(); printWriter.close(); socket.close(); server.close(); } catch (IOException e) { e.printStackTrace(); } } }
客户端代码:
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class TalkClient { public static void main(String[] args) { try { Socket socket = new Socket("127.0.0.1", 4700); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream()); BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in)); String readline = sysin.readLine(); while (!readline.equals("bye")) { out.println(readline); out.flush(); System.out.println("Client:" + readline); System.out.println("Server:" + in.readLine()); readline = sysin.readLine(); } in.close(); out.close(); sysin.close(); socket.close(); } catch (Exception e) { e.printStackTrace(); } } }
服务器端代码(多线程):
import java.io.IOException; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class MultiEchoServer { private static ServerSocket serverSocket; private static final int PORT = 12345; public static void main(String[] args) throws IOException { try { serverSocket = new ServerSocket(PORT); } catch (IOException e) { System.out.println("Unable connect to the port"); System.exit(1); } do { Socket client = serverSocket.accept(); System.out.println("New client accept..."); ClientHandler clientHandler = new ClientHandler(client); clientHandler.start(); } while (true); } } class ClientHandler extends Thread { private Socket client; private Scanner input; private PrintWriter output; public ClientHandler(Socket client) { this.client = client; try { input = new Scanner(client.getInputStream()); output = new PrintWriter(client.getOutputStream(),true); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { String receive = ""; do { receive = input.nextLine(); System.out.println("Server receive message:" + receive); output.println("Echo:" + receive); } while (!receive.equalsIgnoreCase("q")); try { if (client != null) { System.out.println("Closing connection..."); client.close(); } } catch (IOException e) { System.out.println("Unable to close connection..."); } } }
客户端代码:
import java.io.IOException; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class MultiEchoClient { private static InetAddress host; private static final int PORT = 12345; public static void main(String[] args) { try { host = InetAddress.getLocalHost(); } catch (UnknownHostException e) { System.out.println("Host id not found!"); System.exit(1); } SenderMessages(); } public static void SenderMessages() { Socket socket = null; try { socket = new Socket(host, PORT); Scanner input = new Scanner(socket.getInputStream()); PrintWriter outpout = new PrintWriter(socket.getOutputStream(),true); Scanner userInput = new Scanner(System.in); String message, response; do { System.out.println("Enter Message:"); message = userInput.nextLine(); outpout.println(message); response = input.nextLine(); System.out.println("Server " + response); } while (!message.equalsIgnoreCase("q")); input.close(); userInput.close(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (socket != null) { System.out.println("Closing connetion..."); socket.close(); } } catch (IOException e) { e.printStackTrace(); } } } }