您的位置:首页 > 其它

简单的多线程之间的通讯

2014-03-03 08:57 387 查看
/*

 * 客户端

 */

package com.derun.tcp;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.Socket;

public class TCPClient {

    public static void main(String[] args) {

        try (Socket socket = new Socket("localhost",1234);

                PrintWriter pw = new PrintWriter(socket.getOutputStream());

                BufferedReader back = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                BufferedReader br = new BufferedReader(new InputStreamReader(System.in,"GBK"));) {   //"GBK"防止乱码

            //Socket socket = new Socket("192.168.16.105", 1234);

            //Socket socket = new Socket(InetAddress.getLocalHost(),1234);

            //Socket socket = new Socket("127.0.0.1",1234);

            while (true) {

                System.out.println("您说:");

                String content = br.readLine();   //接收键盘输入

                pw.println(content);

                pw.flush();   //刷新

                String echo = back.readLine();

                System.out.println(echo);

                if ("over".equals(content)) {

                    break;

                }

            }

            //pw.println("hello");

        } catch (IOException ex) {

        }

    }

}

/*

 * 服务器端TCP

 主要用到API:java.net.ServerSocket和java.net.Socket

 */

package com.derun.tcp;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

public class TCPServer {

    public static void main(String[] args) {

        System.out.println("正在启动服务器···");

        try (ServerSocket serverSocket = new ServerSocket(1234);){ //端口号为1234       

            System.out .println("正在监听客户端连接请求·····");

            try (Socket socket = serverSocket.accept();     //阻塞,等待客户端的连接要求

                    //InputStream is = socket.getInputStream ();

                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                    PrintWriter pw = new PrintWriter(socket.getOutputStream());

                    ){

                    String content = "";

                    while((content = br.readLine()) != null){

                        System.out.println("客户端说:" + content);

                        pw.println("已收到内容" + content);

                        pw.flush();

                    }

                }   

            } catch (IOException ex) {

                ex.printStackTrace();

            }

        }

    }

/*

 * 多线程服务器端TCP

 主要用到API:java.net.ServerSocket和java.net.Socket

 */

package com.derun.tcp;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

class TCPServerThread extends Thread {

    private Socket socket;

    TCPServerThread(Socket socket) {

        this.socket = socket;

    }

    @Override

    public void run() {

        try (BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                PrintWriter pw = new PrintWriter(socket.getOutputStream());) {

            String content = "";

            while ((content = br.readLine()) != null) {

                System.out.println("客户端说:" + content);

                pw.println("已收到内容" + content);

                pw.flush();

            }

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

public class TCPServer2 {

    public static void main(String[] args) {

        System.out.println("正在启动服务器···");

        try (ServerSocket serverSocket = new ServerSocket(1234);) { //端口号为1234       

            System.out.println("正在监听客户端连接请求·····");

            Socket socket = serverSocket.accept();

            new TCPServerThread(socket).start();

            /*try (Socket socket = serverSocket.accept();     //阻塞,等待客户端的连接要求

             //InputStream is = socket.getInputStream ();

             BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

             PrintWriter pw = new PrintWriter(socket.getOutputStream());

             ){

             String content = "";

             while((content = br.readLine()) != null){

             System.out.println("客户端说:" + content);

             pw.println("已收到内容" + content);

             pw.flush();

             }

             }   

             */

        } catch (IOException ex) {

            ex.printStackTrace();

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多线程 socket 服务器