SocketThread給服務端用的線程類:
public class SocketThread extends Thread{ private Socket socket; public SocketThread(Socket socket) { this.socket=socket; } @Override public void run() { if(socket!=null) { BufferedReader br=null; try { InputStream is = socket.getInputStream(); br=new BufferedReader(new InputStreamReader(is,"utf-8")); while(true) { String data=br.readLine(); if(data==null) {//客戶端已經關閉 break; } System.out.println(socket.getInetAddress()+"說:"+data); if(data.equals("886")||data.equals("byebye")) { break; } } } catch (IOException e) { // TODO Auto-generated catch block //e.printStackTrace(); }finally { try { br.close(); socket.close(); System.out.println(socket.getInetAddress()+"退出了..."); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
TCPServer服務端:
public class TcpServer { public static void main(String[] args) throws Exception { //1創建ServerSocket ServerSocket listener=new ServerSocket(10086); //2調⽤accept(),接收客戶端請求 System.out.println("服務器已啟動.........."); while(true) { Socket socket=listener.accept(); System.out.println(socket.getInetAddress()+"進來了........."); //創建線程對象,負責接收數據 new SocketThread(socket).start(); } } }
TCPClient客戶端:
public class TcpClient { public static void main(String[] args) throws Exception { //1創建Socket Socket socket=new Socket("192.168.0.103", 10086); //2獲取輸出流 OutputStream os=socket.getOutputStream(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os,"utf-8")); //3控制輸⼊ Scanner input=new Scanner(System.in); while(true) { String data=input.nextLine(); bw.write(data); bw.newLine();//發送換⾏符 bw.flush(); if(data.equals("886")||data.equals("byebye")) { break; } } //4關閉 bw.close(); socket.close(); } }