Socket多客户端(转自生菜肥羊)
客户端:import java.io.*; import java.net.*; public class talkclient { public static void main(String args[]) { try { Socket socket = new Socket("192.168.13.123",9999); BufferedReader sin = new BufferedReader(new InputStreamReader(System.in)); PrintWriter os = new PrintWriter(socket.getOutputStream()); BufferedReader is = new BufferedReader(new InputStreamReader( socket.getInputStream())); String readline; while (!"bye".equals(readline=sin.readLine())) { //==============写服务端==================// os.println(readline); os.flush(); //System.out.println("Client:" + readline); //==============读服务端==================// System.out.println("服务端反馈:"+is.readLine()); } String ss=is.readLine(); while(ss!=""){ System.out.println(ss); } os.close(); is.close(); socket.close(); }catch(Exception e) { System.out.println("Error" + e); } } }
服务端:负责接收多个客户端的连接 ,然后交给多线程去处理
import java.io.*; import java.net.*; //引入了无关的类 import java.applet.Applet; public class talkserver { static int clientnum = 0; // 静态成员变量,记录当前客户的个数 public static void main(String args[]) { ServerSocket server = null; try { server = new ServerSocket(9999); } catch (IOException e1) { e1.printStackTrace(); } while(true){ try { Socket socket = server.accept(); System.out.println("一个客户端连上来了...."); ServerThread thread=new ServerThread(socket); //thread.start(); } catch (IOException e) { e.printStackTrace(); } } } }
多线程程序:
import java.io.*; import java.net.*; /** * 服务器端逻辑线程 */public class ServerThread extends Thread { Socket socket; BufferedReader br=null; PrintWriter os=null; public ServerThread(Socket socket) { this.socket = socket; start(); //启动线程 } public void run() { BufferedReader is=null; PrintWriter os=null; try { boolean flag=true; //ServerSocket server = null; //Socket socket = null; //ServerSocket server = new ServerSocket(9999); System.out.println("server listen on port 9999..."); //socket = server.accept(); is = new BufferedReader(new InputStreamReader(socket.getInputStream())); os = new PrintWriter(socket.getOutputStream()); while(flag){ System.out.println("-------------------"); //多线程 //new ServerThread(socket, clientnum).start(); //标准输入端读取一行 BufferedReader sin = new BufferedReader(new InputStreamReader(System.in)); String str; String reply; while(!"".equals(str=is.readLine())){ System.out.println(".....start..........."); System.out.println(str); //每写一行,就等着从客户端读进一行, reply=sin.readLine(); os.println("服务端 说:"+reply); //写到客户端 os.flush(); System.out.println("......end........."); } System.out.println("out of while..."); //String line=sin.readLine(); os.println("server AAAAAAAAAAAAA"); //写到客户端 os.flush(); } //****流如果关闭,socket也将会关闭,所以如果想在一个socket连接之内通讯*****//, //***则应该在while之外关闭socket****// //server.close(); } catch (Exception e) { System.out.println("Error" + e); }finally{ try { is.close(); os.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 关闭流和连接 */ private void close() { try { //关闭流和连接 os.close(); br.close(); socket.close(); } catch (Exception e) { } } }
页:
[1]