多线程Socket实用例子

文章路径:http://javasam.iteye.com/blog/1484307
简单实用的Socket例子--服务端+客户端:
http://javasam.iteye.com/blog/1484173
Java代码 
/**服务端**/ 
 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.net.Socket; 
 
public class ThreadServer extends Thread { 
 
    private Socket server; 
    private BufferedReader reader; 
    private PrintWriter writer; 
 
    public ThreadServer(Socket socket) throws IOException { 
        server = socket; 
        reader = new BufferedReader(new InputStreamReader( 
                server.getInputStream()));//创建输入流 
        writer = new PrintWriter(new OutputStreamWriter( 
                server.getOutputStream()));//创建输出流 
        start(); 
    } 
 
    public void run() { 
        try { 
            while (true) { 
                String str = reader.readLine();//读取客户端传来的请求 
                if (str.equals("END")) 
                    break; 
                System.out.println("Echoing:" + str); 
                writer.println(str);//打印请求信息 
            } 
        } catch (IOException e) { 
        } finally { 
            try { 
                server.close(); 
            } catch (IOException e) { 
            } 
        } 
    } 
 
        /**main启动服务器**/ 
    static final int PORT = 8080; 
    public static void main(String[] args)  throws IOException{ 
        ServerSocket server  = new ServerSocket(PORT);//启动服务器 
        System.out.println("Server Started:" + server); 
        try{ 
            while(true){ 
                Socket socket = server.accept();//进入阻塞状态准备接收数据 
                try { 
                    new ThreadServer(socket);//创建服务线程 
                } catch (IOException e) { 
                    socket.close(); 
                } 
            } 
        }finally{ 
            server.close(); 
        } 
    } 

/**客户端**/ 
package com.net; 
 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.net.InetAddress; 
import java.net.Socket; 
 
 
public class ThreadClient extends Thread { 
 
    private Socket client;//客户端套接字(浏览器等等) 
    private BufferedReader reader;//输入流 
    private PrintWriter writer;//输出流 
    private static int counter = 0;//请求数量 
    private int id = counter++;//请求id 
    private static int threadcount = 0;//线程数量 
 
    public  static int getThreadCount() { 
        return threadcount; 
    } 
    public ThreadClient(InetAddress address){ 
        System.out.println("Making client" + id); 
        threadcount ++; 
        try{ 
            client = new Socket(address,MultiJobServer.PORT);//发送请求到指定地址+端口 
        }catch (IOException e) { 
        } 
         
        try { 
            reader = new BufferedReader(new InputStreamReader(client.getInputStream()));//初始化输入流 
            writer = new PrintWriter(new OutputStreamWriter(client.getOutputStream()),true);//初始化输出流 
            start();//开始线程 
        } catch (IOException e) { 
            try { 
                client.close(); 
            } catch (IOException e2) { 
            } 
        } 
    } 
    public void run(){ 
        try { 
            for(int i = 0 ; i < 25 ; i ++){ 
                writer.println("Client " + id + ":" + i);//发送请求信息 
                String str = reader.readLine();//接收返回的信息 
                System.out.println(str);//打印返回数据 
            } 
            writer.println("END"); 
        } catch (Exception e) { 
        }finally{ 
            try { 
                client.close(); 
            } catch (IOException e) { 
            } 
            threadcount --; 
        } 
    } 
 
    static final int MAX_THREADS = 4000;//最大线程数 
    @SuppressWarnings("static-access") 
    public static void main(String[] args) throws UnknownHostException, InterruptedException { 
        InetAddress address = InetAddress.getByName(null);//得到本机地址 
        while(true){ 
            if(ThreadClient.getThreadCount() < MAX_THREADS){ 
                new ThreadClient(address);//发送请求 
                Thread.currentThread().sleep(100);//休眠100毫秒后继续请求 
            } 
        } 
    } 


/**服务端**/ 
 
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 
 
public class Server { 
 
    public static final int PORT = 8080; 
    public static void main(String[] args) throws IOException { 
        ServerSocket server = new ServerSocket(PORT); 
        System.out.println("Started " + server); 
        try { 
            Socket client = server.accept(); 
            try { 
                System.out.println("Connection accepted: " + client); 
                BufferedReader  reader = new BufferedReader(new InputStreamReader(client.getInputStream())); 
                PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())),true); 
                while(true){ 
                    String str = reader.readLine(); 
                    if(str.equals("END"))break; 
                    System.out.println("Echoing:" + str); 
                    writer.println(str); 
                } 
            } finally{ 
                System.out.println("closing..."); 
                client.close(); 
            } 
        } finally{ 
            server.close(); 
        } 
         
    } 

Java代码 
/**客户端**/ 
 
import java.io.BufferedOutputStream; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.InetAddress; 
import java.net.Socket; 
 
public class Client { 
    public static void main(String[] args) throws IOException { 
        InetAddress address = InetAddress.getByName(null); 
        System.out.println("address:" + address); 
        Socket client = new Socket(address,JobServer.PORT); 
        try{ 
            System.out.println("socket:" + client); 
            BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream())); 
            PrintWriter writer = new PrintWriter(new BufferedOutputStream(client.getOutputStream()),true); 
            for(int i = 0; i < 10 ; i++){ 
                writer.println("howdy " +  i); 
                String str = reader.readLine(); 
                System.out.println(str); 
            } 
            writer.println("END"); 
        }finally{ 
            System.out.println("closing..."); 
            client.close(); 
        } 
    } 

猜你喜欢

转载自lvwenwen.iteye.com/blog/1486882