网络编程之全双工通信

服务端

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class ServerTest {

    public static void main(String[] args) throws IOException {
        Server server = new Server("8888");
        server.start();
    }
}

class Server{
    private String post;
    private ServerSocket serverSocket;
    private Scanner input;

    public Server(String post) {
        this.post = post;
        init();
    }

    public void init(){
        try {
            serverSocket=new ServerSocket(Integer.valueOf(post));
            input=new Scanner(System.in);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public void start() throws IOException {
        while(true){
            System.out.println("等待客户端连接。。。。");
            
            Socket socket = serverSocket.accept();
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintStream	ps = new PrintStream(socket.getOutputStream());
            System.out.println("连接成功!。。。。");
            
            Channel channel = new Channel(socket, ps, reader);
            System.out.println("创建信道成功!。。。");
            

        }

    }

    private class Channel {
        private Socket socket;
        private PrintStream	ps;//出现个很奇怪的现象,只能用打印流,其他流总收不到。。。。
        private BufferedReader reader;

        public Channel(Socket socket, PrintStream ps, BufferedReader reader) {
            this.socket = socket;
            this.ps = ps;
            this.reader = reader;
            new Send().start();
            new Receive().start();
        }

        class Send extends Thread {
            @Override
            public void run() {
                while (true) {
                    System.out.println("等待输入中。。。");
                    String str="Hello World!";
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    //String str = input.nextLine();//多个信道都使用会出错
                    if(!str.trim().equals("")){//str不会有null的现象
                        try {
                            ps.println(str);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }

            }
        }

        class Receive extends Thread {
            @Override
            public void run() {
                while (true) {
                    try {
                        System.out.println("等待接收中。。。");
                        System.out.println("来自客户端的信息:"+reader.readLine());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

}


客户端

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class ClientTest {


    public static void main(String[] args) {
        Client client = new Client("127.0.0.1", "8888");
        client.start();
    }

}
class Client{
    private String host;
    private String post;
    private Socket socket;
    private PrintStream ps;//出现个很奇怪的现象,只能用打印流,其他流总收不到。。。
    private BufferedReader reader;
    private Scanner input;

    public Client(String host, String post) {
        this.host = host;
        this.post = post;
        init();
    }

    public void init(){
        try {
            socket = new Socket(host, Integer.valueOf(post));
            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            ps = new PrintStream(socket.getOutputStream());
            input=new Scanner(System.in);
            System.out.println("连接成功。。。");
            
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public void start(){
        new Send().start();
        new Receive().start();
    }

    private class Send extends Thread{

        @Override
        public void run() {
            while(true){
                System.out.println("等待输入中。。。");
                String str = input.nextLine();
                if(!str.trim().equals("")){//str不会有null的现象
                    try {
                        ps.println(str);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }

    }

    private class Receive extends Thread{

        @Override
        public void run() {
            while(true){
                try {
                    System.out.println("等待接收中。。。");
                    System.out.println("来自服务器的信息:"+reader.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值