一个服务器与一个客户端实现半双工通信。

首先启动服务器监听,然后客户端连接到服务器

然后客户端对服务器发送信息,服务器也能回复信息以此循环

直到客户端发送“呵呵”之后关闭连接。

 

服务器代码:

package server;

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

public class Server2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Server2 s = new Server2();
    }
    public Server2(){
        try {
            ServerSocket ss = new ServerSocket(9999);
            System.out.println("开始监听");
            Socket server = ss.accept();
            //读取客户端传来数据的流
            InputStreamReader isr = new InputStreamReader(server.getInputStream());
            BufferedReader br = new BufferedReader(isr);
            //发给客户端数据的流
            PrintWriter spw = new PrintWriter(server.getOutputStream(), true);
            //接收从控制台输入的信息
            InputStreamReader isr2 = new InputStreamReader(System.in);
            BufferedReader br2 = new BufferedReader(isr2);
            while(true){
                //接收从客户端发来的信息
                String response = br.readLine();
                System.out.println("客户端:" + response);
                
                if(response.equals("呵呵")){
                    server.close();
                    System.out.println("对话结束");
                    break;
                }
                //提示输入对客户端发送的信息
                System.out.println("输入给客户端的信息:");
                String info = br2.readLine();
                //把控制台输入信息回送给客户端
                spw.println(info);
                
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
}

 

客户端代码:

package client;

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

public class Client2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Client2 c = new Client2();
    }
    public Client2(){
        try {
            Socket client = new Socket("127.0.0.1", 9999);
            System.out.println("建立连接");
            //读取服务器发来的数据流
            InputStreamReader isr = new InputStreamReader(client.getInputStream());
            BufferedReader br = new BufferedReader(isr);
            //发送给服务器的流
            PrintWriter cpw = new PrintWriter(client.getOutputStream(), true);
            //接收控制台的流
            InputStreamReader isr2 = new InputStreamReader(System.in);
            BufferedReader br2 = new BufferedReader(isr2);
            while(true){
                //提示输入
                System.out.println("请输入往服务器发送的信息:");
                String info = br2.readLine();
                //发送给服务器
                cpw.println(info);
                
                if(info.equals("呵呵")){
                    client.close();
                    System.out.println("对话结束");
                    break;
                }
                //接收从服务器发来的信息
                String response = br.readLine();
                System.out.println("服务器:"+response);
                
                
            }
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

 

先后运行服务器和客户端,然后到客户端的控制台发送信息,最后到服务器的控制台查看信息并回复信息即可。