利用Socket 实现多客户端的请求与响应

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    @SuppressWarnings("resource")
    public static void main(String[] args) {
        try {
            System.out.println("服务器已启动端口号为:8888,等待连联中...");
            ServerSocket serverSocket = new ServerSocket(8888);
            Socket socket = null;
            while(true){
                socket = serverSocket.accept();
                ResponsThread rt = new ResponsThread(socket);
                rt.start();
            }
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
    public static void main(String[] args) {
        try {
            //创建与服务器通讯实例
            Socket socket = new Socket("127.0.0.1",8888);
            OutputStream outPutStream = socket.getOutputStream();
            //写入请求数据
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outPutStream,"utf-8"));
            bufferedWriter.write("张沿");
            bufferedWriter.flush();
            socket.shutdownOutput();
            
            //获取服务器响应信息
            InputStream inputStream = socket.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
            String info = bufferedReader.readLine();
            while(info != null){
                System.out.println(info);
                info = bufferedReader.readLine();
            }
            socket.shutdownInput();
            bufferedReader.close();
            bufferedWriter.close();
            inputStream.close();
            socket.close();
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

 

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class ResponsThread extends Thread{
    
    private Socket socket;
    
    public ResponsThread(Socket socket){
        this.socket = socket;
    }

    @Override
    public void run() {
        InputStream inputStream = null;
        BufferedReader bufferedReader = null;
        OutputStream outputStream = null;
        BufferedWriter bufferedWriter = null;
        //接收客户端请求信息
        try{
            inputStream = socket.getInputStream();
            bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
            String info = bufferedReader.readLine();
            while(info != null){
                System.out.println("客户端发送信息为:" + info);
                info = bufferedReader.readLine();
            }
        
            //响应客户端信息
            outputStream = socket.getOutputStream();
            bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "utf-8"));
            bufferedWriter.write("服务器响应的信息为:欢迎您!!!");
            bufferedWriter.flush();
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            try {
                socket.shutdownInput();
                bufferedWriter.close();
                outputStream.close();
                bufferedReader.close();
                inputStream.close();
                socket.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }
    
     
}

 

posted @ 2017-02-10 17:23  一直在路上行走  阅读(565)  评论(0)    收藏  举报