TCP实现多个客户端发送数据给服务器端
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(); } }