首页 > 代码库 > Socket编程半双工

Socket编程半双工

服务器

package com.test;import java.io.IOException;import java.net.*;import java.io.*;public class MyServer {    public static void main(String[] args) {        // TODO Auto-generated method stub        MyServer ms = new MyServer();    }    public MyServer(){        try {            //服务器用ServerSocket对象创建  参数代表的是在9999端口上监听            System.out.println("服务器在9999端口等待监听...");            ServerSocket ss = new ServerSocket(9999);            //等待监听 accept() 方法返回的是Socket对象            Socket s = ss.accept();            //接收客户端输入的数据            InputStreamReader isr =new InputStreamReader(s.getInputStream());            BufferedReader br = new BufferedReader(isr);            //接收控制台输入的数据            InputStreamReader isr2 =new InputStreamReader(System.in);            BufferedReader br2 = new BufferedReader(isr2);            //想客户端写入输出流            PrintWriter pw = new PrintWriter(s.getOutputStream(),true);            while(true){                String infoFromClient = br.readLine();                if(infoFromClient.equals("exit"))                {                    System.out.println("结束对话!");                    s.close();                    break;                }                System.out.println("客户端说:"+infoFromClient);                System.out.println("请输入您想对客户端说的话:");                String info = br2.readLine();                pw.println(info);            }                    } catch (IOException e) {            e.printStackTrace();        }            }}

客户端

package com.test;import java.net.*;import java.io.*;public class MyClient {    public static void main(String[] args) {        // TODO Auto-generated method stub        MyClient mc = new MyClient();    }    public MyClient(){        try {            //创建客户端连接通道对象 第一个参数表示连接服务器的ip 第2个参数表示连接哪个端口            Socket s = new Socket("127.0.0.1",9999);            //向服务器发送数据  创建写对象 向通道对象的输出流写入数据 true代表及时刷新数据            PrintWriter pw = new PrintWriter(s.getOutputStream(),true);            //创建一个输入流  接收从控制台输入的数据            InputStreamReader isr = new InputStreamReader(System.in);            BufferedReader br = new BufferedReader(isr);                        InputStreamReader isr2 = new InputStreamReader(s.getInputStream());            BufferedReader br2 = new BufferedReader(isr2);                        while(true){                System.out.println("请输入您想对服务器说的话:");                String infoFromControl = br.readLine();                                pw.println(infoFromControl);                if(infoFromControl.equals("exit"))                {                    System.out.println("对话结束!");                    s.close();                    break;                }                String info = br2.readLine();                System.out.println("服务器说:"+info);                            }        } catch (Exception e) {            e.printStackTrace();        }            }}

需要注意的地方是,当退出对话判断客户端判断要在想服务端发送数据后判断 不然 服务器没接收到  客户端就关闭了 在这里从两个地方读取数据流 一个是s通道  另一个从控制台读取数据流

Socket编程半双工