Socket编程(二)---TCP简单实例

来源:互联网 发布:休闲鞋女淘宝 编辑:程序博客网 时间:2024/05/22 03:56

从上篇文章我们已经对Socket有了初步的认识,现在我们就通过一个例子来实现。

1.服务端

通信,首先需要的就是服务端,如果没有服务端,我们和谁通信?通过以下代码我们来创建一个服务端

        ServerSocket server = null;        System.out.println("应用启动.....");        try {            server = new ServerSocket(7456);//绑定本地的端口号            while (true) {//循环,可以多次建立连接                Socket connection = null;                try {                    // 接收一个连接,在没有客户端访问的时候,accept会一直阻塞                    connection = server.accept();                    // 获取连接的客户端的地址                    System.out.println("一个连接建立" + connection.getInetAddress());                    // 从连接中获取输出流                    Writer out = new OutputStreamWriter(connection.getOutputStream());                    Date date = new Date();                    out.write(date.toString() + "\r\n");                    // 输出流都会有一个缓冲区,比如有一个1024字节的缓冲区                    // 如果缓冲区中的数据量不足1024,那么就会等待,而不会将数据发送给客户端                    // 使用flush()则将缓冲区中的数据强制发送                    out.flush();                    connection.close();                } finally {                    // 必须手动关闭掉                    if (connection != null)                        connection.close();                }            }        } catch (IOException e) {            e.printStackTrace();        } finally {            try {                if (server != null)                    server.close();            } catch (IOException e) {                e.printStackTrace();            }        }

2.客户端

        Socket socket = null;        try {            // 连接地址和端口号,地址用于找到主机,端口号用于找到对应应用            socket = new Socket("localhost", 7456);            InputStreamReader reader = new InputStreamReader(socket.getInputStream());            int c;            while ((c = reader.read()) != -1) {                System.out.print((char) c);            }        } catch (Exception e) {            e.printStackTrace();        } finally {            try {                if (socket != null)                    socket.close();            } catch (IOException e) {                e.printStackTrace();            }        }

3.连接和使用

首先运行服务端代码,效果如下:

应用启动.....

再启动客户端,服务端控制台如下:

应用启动.....一个连接建立/127.0.0.1

回到客户端控制台,内容如下:

Fri May 20 14:41:31 CST 2016

源码位置:https://github.com/oDevilo/Java-Network

1 0
原创粉丝点击