java socket网络编程

最近,自己仿照网上写了个多客户端,网络通信(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();
	}

}

 

你可能感兴趣的:(java,thread,编程,.net,socket)