Socket高级编程 多客户端

客户端:

Java代码 复制代码 收藏代码
  1. package com.wlh.test;   
  2.   
  3. import java.io.*;   
  4. import java.net.*;   
  5. public class talkclient   
  6. {   
  7.     public static void main(String args[])   
  8.     {   
  9.         try  
  10.         {   
  11.             Socket socket = new Socket("192.168.13.123",9999);   
  12.             BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));   
  13.             PrintWriter os = new PrintWriter(socket.getOutputStream());   
  14.             BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));   
  15.             String readline;   
  16.                
  17.             while (!"bye".equals(readline=sin.readLine()))  {   
  18.                 //==============写服务端==================//   
  19.                 os.println(readline);   
  20.                 os.flush();   
  21.                    
  22.                 //==============读服务端==================//   
  23.                 System.out.println("服务端反馈:"+is.readLine());   
  24.             }   
  25.                
  26.             os.close();   
  27.             is.close();   
  28.             socket.close();   
  29.         }catch(Exception e)   
  30.         {   
  31.             System.out.println("Error" + e);   
  32.         }   
  33.     }   
  34. }   
  35.                               
package com.wlh.test;

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("服务端反馈:"+is.readLine());
			}
			
			os.close();
			is.close();
			socket.close();
		}catch(Exception e)
		{
			System.out.println("Error" + e);
		}
	}
}
							



服务端:负责接收多个客户端的连接 ,然后交给多线程去处理

Java代码 复制代码 收藏代码
  1. package com.wlh.test;   
  2.   
  3. import java.io.*;   
  4. import java.net.*;   
  5. //引入了无关的类   
  6. import java.applet.Applet;   
  7.   
  8. public class talkserver {   
  9.     static int clientnum = 0// 静态成员变量,记录当前客户的个数   
  10.        
  11.     public static void main(String args[]) {   
  12.         ServerSocket server = null;   
  13.         try {   
  14.             server = new ServerSocket(9999);   
  15.         } catch (IOException e1) {   
  16.             e1.printStackTrace();   
  17.         }   
  18.            
  19.        while(true){   
  20.         try {   
  21.                
  22.             Socket socket = server.accept();   
  23.             System.out.println("一个客户端连上来了....");   
  24.             ServerThread thread=new ServerThread(socket);   
  25.             //thread.start();   
  26.         } catch (IOException e) {   
  27.             e.printStackTrace();   
  28.         }   
  29.            
  30.        }   
  31.     }   
  32. }  
package com.wlh.test;

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();
		}
		
	   }
	}
}




多线程程序:

Java代码 复制代码 收藏代码
  1.   
  2. package com.wlh.test;   
  3.   
  4. import java.io.BufferedReader;   
  5. import java.io.IOException;   
  6. import java.io.InputStreamReader;   
  7. import java.io.PrintWriter;   
  8. import java.net.Socket;   
  9.   
  10. /**  
  11.  * 服务器端逻辑线程  
  12.  */  
  13. public class ServerThread extends Thread {   
  14.     Socket socket;   
  15.     BufferedReader br=null;   
  16.     PrintWriter os=null;   
  17.     public ServerThread(Socket socket) {   
  18.         this.socket = socket;   
  19.         start(); //启动线程   
  20.     }   
  21.        
  22.     public void run() {   
  23.         BufferedReader is=null;    
  24.         PrintWriter os=null;   
  25.            
  26.         try {   
  27.             boolean flag=true;   
  28.             //ServerSocket server = null;   
  29.             //Socket socket = null;   
  30.             //ServerSocket server = new ServerSocket(9999);   
  31.             System.out.println("server listen on port 9999...");   
  32.             //socket = server.accept();   
  33.             is = new BufferedReader(new InputStreamReader(socket.getInputStream()));   
  34.             os = new PrintWriter(socket.getOutputStream());   
  35.            
  36.            while(flag){   
  37.              System.out.println("-------------------");   
  38.                //多线程   
  39.               //new ServerThread(socket, clientnum).start();   
  40.                  
  41.                
  42.                  //标准输入端读取一行   
  43.                  BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));   
  44.                 String str;   
  45.                 String reply;   
  46.                 while(!"".equals(str=is.readLine())){   
  47.                     System.out.println(".....start...........");                       
  48.                     System.out.println(str); //每写一行,就等着从客户端读进一行,   
  49.                        
  50.                     //====向客户端反馈读到的信息=====//   
  51.                     os.println("服务端已经收到:"+str);   
  52.                     os.flush();   
  53.                        
  54.                     //=======从控制台读取信息==========//   
  55.                     //reply=sin.readLine();    
  56.                     //os.println("服务端 说:"+reply); //写到客户端   
  57.                     //os.flush();   
  58.                        
  59.                     System.out.println("......end.........");   
  60.                 }   
  61.   
  62.                    
  63.                 System.out.println("out of while...");     
  64.                 //String line=sin.readLine();   
  65.                 os.println("server AAAAAAAAAAAAA"); //写到客户端   
  66.                 os.flush();   
  67.             }   
  68.            
  69.         //****流如果关闭,socket也将会关闭,所以如果想在一个socket连接之内通讯*****//,   
  70.         //***则应该在while之外关闭socket****//   
  71.            
  72.         //server.close();   
  73.            
  74.         } catch (Exception e) {   
  75.             System.out.println("Error" + e);   
  76.         }finally{   
  77.             try {   
  78.                 is.close();   
  79.                 os.close();   
  80.                 socket.close();   
  81.             } catch (IOException e) {   
  82.                 e.printStackTrace();   
  83.             }   
  84.                
  85.         }   
  86.        
  87.        
  88.     }   
  89.   
  90.     /**  
  91.  
  92.      * 关闭流和连接  
  93.  
  94.      */  
  95.     private void close() {   
  96.         try {   
  97.             //关闭流和连接   
  98.             os.close();   
  99.             br.close();   
  100.             socket.close();   
  101.         } catch (Exception e) {   
  102.         }   
  103.     }   
  104.   
  105.        
  106. }  
posted @ 2011-11-22 11:17  java学弟  阅读(1044)  评论(0编辑  收藏  举报