socket 小例子

来源:互联网 发布:js 获取多个class 编辑:程序博客网 时间:2024/04/29 05:37
public class Client {    public static void main(String[] args) throws Exception{        //客户端请求与本机在2017端口建立起TCP连接        Socket client = new Socket("127.0.0.1",2017);        client.setSoTimeout(10000);        //获取键盘输入        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));        //获取socket的输出流,用来发送数据到服务端        PrintStream out = new PrintStream(client.getOutputStream());        //获取socket输入流,用来接受服务端数据        BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream()));        boolean flag = true;        while (flag){            System.out.println("输入信息:");            String str = reader.readLine();            //发送数据到服务端            out.println(str);            if("bye".equals(str)){                flag = false;            }else {                try{                    //从服务器端接受数据有个时间限制(系统自设,也可以自己设置),超过了这个时间便会抛出异常                    String echo = buf.readLine();                    System.out.print(echo);                }catch (Exception e){                    System.out.println("Time out,No response");                }            }        }        reader.close();        if(client != null){            //如果构造函数建立起连接,则关闭套接字,如果没有建立连接自然不用关闭            client.close();//只关闭socket,它关联的输入流、输出流也会关闭        }    }

}

public class Server {    public static void main(String[] args) throws Exception{        //服务端在2017端口监听客户端请求TCP连接        ServerSocket serverSocket =  new ServerSocket(2017);        Socket client = null;        boolean f = true;        while (f){            client = serverSocket.accept();            System.out.println("与客户端连接成功!");            //为每个客户端连接开启一个连接            new Thread(new ServerThread(client)).start();        }        serverSocket.close();    }}


public class ServerThread implements Runnable{    private Socket socket = null;    public ServerThread(Socket socket) {        this.socket = socket;    }    @Override    public void run() {        try{            //获取socket的输出流,用来向客户端发数据            PrintStream out = new PrintStream(socket.getOutputStream());            //获取socket的输入流,用来接受客户端发送过来的数据            BufferedReader buf = new BufferedReader(new InputStreamReader(socket.getInputStream()));            boolean flag = true;            while (flag){                //接受从客户端发送过的数据                String str = buf.readLine();                if(str == null || "".equals(str)){                    flag = false;                }else {                    if("bye".equals(str)){                        flag = false;                    }else{                        //将接受到的字符串前面加上"echo",发送到对应客户端                        out.println("echo:"+str);                    }                }            }            out.close();            socket.close();        }catch (Exception e){            e.printStackTrace();        }    }}

原创粉丝点击