java socket网络编程

xiaoxiao2026-08-16  25

最近,自己仿照网上写了个多客户端,网络通信(socket)用例:

1. Server2.java--服务端

2. Client2.java--客户端

3. Main2.java--启动测试

 

现在基本运行起来了,就是使用 inputstream时,使用BufferedInputStream bis 。。总是阻塞程序继续运行。。。

 

package com.automic.hxb.socketTest.test2; import java.io.*; import java.net.*; public class Server2 extends Thread { private int port = 5678; private ServerSocket server; private int onLine = 0;// connect client numbers /** * dispatcher start work */ public void startWork() { this.start(); } /* * (non-Javadoc) * * @see java.lang.Thread#run() */ @Override public void run() { // TODO Auto-generated method stub try {// get server socket server = new ServerSocket(port); while (true) { this.getConn(); System.out.println("Server2 -44- onLine = " + onLine); try { sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { ; } } } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } finally { try{ if(server != null){ server.close(); } }catch(Exception e){ e.printStackTrace(); }finally{;} } } /** * connect client socket */ private void getConn() { try { System.out.println("server start work....."); Socket client = server.accept(); System.out.println("client port : " + client.getPort()); ClientThread ct = new ClientThread(client); onLine++; ct.start(); } catch (Exception e) { e.printStackTrace(); } finally { ; } } /** * handle per client`s connection * * @author hxb * */ public class ClientThread extends Thread { private Socket client; private BufferedReader in; private PrintWriter out; public ClientThread(Socket client) { this.client = client; } /* * (non-Javadoc) * * @see java.lang.Thread#run() */ @Override public void run() { // TODO Auto-generated method stub try { /** * read message from client********/ String str = this.read(); /** *write message to client *********/ this.send(str); } catch (Exception e) { e.printStackTrace(); } finally { /** *close object********************/ this.closeObjs(); } } /** * read message from client connection * * @return */ private String read() { try { in = new BufferedReader(new InputStreamReader(client .getInputStream())); StringBuffer sb = new StringBuffer(); String str = in.readLine(); sb.append(str); System.out.println("Server2 -69- 客户端输入:" + sb.toString()); return sb.toString(); } catch (Exception e) { e.printStackTrace(); } finally { ; } return null; } /** * write message to client connection * * @param bakMess */ private void send(String bakMess) { try { out = new PrintWriter(client.getOutputStream()); bakMess = "服务器端已收到!\n mess:" + bakMess; out.println(bakMess); out.flush(); } catch (Exception e) { e.printStackTrace(); } finally { ; } } /** * close all object */ private void closeObjs() { try { if (out != null) { out.close(); } if (in != null) { in.close(); } if (client != null) { client.close(); onLine--; } } catch (Exception e) { e.printStackTrace(); } finally { ; } } } }

 

package com.automic.hxb.socketTest.test2; import java.io.*; import java.net.*; public class Client2 extends Thread{ private String ip = "192.168.0.131"; private int port = 5678; private Socket server; private BufferedReader in; private PrintWriter out; private int clientNum = 10; public void startWork(){ this.start(); } /* (non-Javadoc) * @see java.lang.Thread#run() */ @Override public void run() { // TODO Auto-generated method stub int i = 1; while(i < clientNum){ this.connServer(i); i++; try { sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private void connServer(int i){ try { System.out.println("client -" + i + "- start work...."); server = new Socket(ip, port); /***send mess to server******/ String str = "服务器你好,I am client -" + i + "- ..... helllllllll"; this.send("client -" + i + "- say:" + str); /***read bakMess from server*********/ this.read(); /***close object ******/ this.closeObjs(); } catch (Exception e) { e.printStackTrace(); } finally { ; } } /** * send message to server * @param sender */ private void send(String sender){ try{ PrintWriter out = new PrintWriter(server.getOutputStream()); out.println(sender); out.flush(); }catch(Exception e){ e.printStackTrace(); }finally{;} } /** * read back message from server */ private void read(){ try{ BufferedReader in = new BufferedReader(new InputStreamReader(server .getInputStream())); StringBuffer sb = new StringBuffer(); String rl = in.readLine(); while (rl != null) { sb.append(rl); rl = in.readLine(); } System.out.println("Client2 -30-" + sb.toString()); }catch(Exception e){ e.printStackTrace(); }finally{;} } /** * close all objets */ private void closeObjs(){ try{ if(out != null){ out.close(); } if(in != null){ in.close(); } if(server != null){ server.close(); } }catch(Exception e){ e.printStackTrace(); }finally{;} } }

 

/** * */ package com.automic.hxb.socketTest.test2; /** * @author hxb * */ public class Main2 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Server2 s2 = new Server2(); s2.startWork(); Client2 c2 = new Client2(); c2.startWork(); } }

 

转载请注明原文地址: https://www.6miu.com/read-5051346.html

最新回复(0)