/*************Client**************/ package com.lyon.demo.socket; import java.io.*; import java.net.*; public class Client { public static void main(String[] args) throws IOException { Socket socket = new Socket(); //超时时间 socket.setSoTimeout(3000); //链接本地,端口2000,超时时间3000毫秒 socket.connect(new InetSocketAddress(Inet4Address.getLocalHost(),2000),3000); System.out.println("已发起服务器连接"); System.out.println("客户端信息"+socket.getLocalAddress()+":"+socket.getLocalPort()); System.out.println("服务端信息"+socket.getInetAddress()+":"+socket.getPort()); try { todo(socket); }catch (Exception e){ System.out.println("异常关闭"); } } private static void todo(Socket client) throws IOException { //键盘输入 InputStream in = System.in; BufferedReader input = new BufferedReader(new InputStreamReader(in)); //得到socket输出流,并转换为打印流 OutputStream outputStream = client.getOutputStream(); PrintStream printStream = new PrintStream(outputStream); InputStream inputStream = client.getInputStream(); BufferedReader socketBufferedReader = new BufferedReader(new InputStreamReader(inputStream)); boolean flag=true; do { //键盘读取一行 String str = input.readLine(); printStream.println(str); //从服务器读取一行 String echo = socketBufferedReader.readLine(); if ("bye".equalsIgnoreCase(echo)) { flag=false; }else{ System.out.println(echo); } }while (flag); //资源释放 printStream.close(); socketBufferedReader.close(); } }
/******************Server******************/
package com.lyon.demo.socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(2000); System.out.println("服务器准备就绪~"); System.out.println("服务器信息:"+server.getInetAddress()+" P:"+server.getLocalPort()); //等待客户端连接 for (;;){ //获取客户端 Socket client = server.accept(); //客户端构建异步线程 ClientHandler clientHandler = new ClientHandler(client); //启动线程 clientHandler.start(); } } private static class ClientHandler extends Thread{ private Socket socket; private Boolean flag = true; public ClientHandler(Socket socket) { this.socket = socket; } @Override public void run() { super.run(); System.out.println("新客户端链接:"+socket.getInetAddress()+" P:"+socket.getPort()); try{ //得到打印流,用于数据输出,服务器返回数据使用 PrintStream socketOutput = new PrintStream(socket.getOutputStream()); //得到数据流,用于接收数据 BufferedReader socketInput = new BufferedReader( new InputStreamReader(socket.getInputStream())); do { String str = socketInput.readLine(); if ("bye".equalsIgnoreCase(str)) { flag = false; //回送 socketOutput.println("bye"); }else{ System.out.println(str); socketOutput.println("回送:"+str.length()); } }while (flag); socketInput.close(); socketOutput.close(); } catch (IOException e) { e.printStackTrace(); System.out.println("连接异常断开"); }finally { try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } System.out.println("客户端已退出:" + socket.getInetAddress() + " P:" + socket.getPort()); } } }