使用java实现Server和Client(TCP)

2014/10/17 23:32
阅读数 2K

Server.java

import java.io.*;
import java.net.*;


public class Server {

    public static final int PORT=8888;
    
    public void Server() throws IOException {
        ServerSocket ss = new ServerSocket(PORT);
        InetAddress ia = InetAddress.getByName(null);

        System.out.println("Server@"+ia+" start!");

        try{
            while(true){
                Socket s = ss.accept();// listen PORT;
                try{
                    new ServerOne(s);
                } catch (IOException e) {
                    s.close();
                } 
            }
        }finally{
            ss.close();
            System.out.println("Server stop!");
        }
    }
}

class ServerOne extends Thread {
    private Socket s;
    private BufferedReader in;
    private PrintWriter out;
    public ServerOne(Socket s) throws IOException {
        this.s = s;
        in = new BufferedReader(new InputStreamReader(s.getInputStream()));
        out = new PrintWriter(new BufferedWriter
                (new OutputStreamWriter(s.getOutputStream())), true);
        start();
    }
    public void run(){
        try {
            while(true) {
                String str = in.readLine();
                if(str.equals("end")) break;
                System.out.println("Server: receive information"+str);
                out.println("Echo: "+str);
            }
            System.out.println("closing....");
        } catch (IOException e){
        } finally {
            try{
                s.close();
            }catch(IOException e){}
        }
    }
}

Client.java:

import java.io.*;
import java.net.*;

public class Client extends Thread {
    static final int MAX_THREADS=25;
    private static int id = 0;
    private static int threadCount = 0;
    private Socket s;
    private BufferedReader in;
    private PrintWriter out;

    public static int getThreadCount(){
        return threadCount;
    }

    public Client(InetAddress ia){
        threadCount++;
        id++;
        System.out.println("Making client: " + id);
        try{
            s = new Socket(ia, Server.PORT);
        } catch (IOException e) {}
        try{
            in = new BufferedReader(new InputStreamReader(s.getInputStream()));
            out = new PrintWriter(new BufferedWriter
                    (new OutputStreamWriter(s.getOutputStream())), true);
            start();
        }catch(IOException e1){
            try{
                s.close();
            }catch(IOException e2){
                System.out.println("Error in Client\n");
            }
        }

    }

    public void run() {
        try{
            String str;
            for(int i = 0; i < 5; i++) {
                out.println("Client #"+id+":"+i);
                str=in.readLine();
                System.out.println("Client: send message#"+id+":"+i+"\n"
                        +"Server reply: "+str);
            }
            out.println("end");
        }catch(IOException e){
        }finally{
            try {
                s.close();
            } catch (IOException e){}
        }
    }

    public static void main(String args[]) throws IOException, InterruptedException {
        InetAddress ia = InetAddress.getByName(null); //null mean localhost
        while(true){
            if(getThreadCount() < MAX_THREADS)
                new Client(ia);
            else break;
            Thread.currentThread().sleep(10);
        }
    }
}


展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部