Java重修笔记 TCP 网络通信编程 - 收发信息

  • 服务端
public class SocketTCP03Server {
    public static void main(String[] args) throws IOException {
        // 在本机监听 9999 端口, 等待发送端建立连接, 前提是保证没有其他服务在监听 9999 端口
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("服务端, 在 9999 端口进行监听, 等待连接中.... ");
        // 当没有客户端连接此端口时会发生阻塞, 直到成功连接才会往下执行, 返回一个 Socket 对象
        Socket socket = serverSocket.accept();
        System.out.println("服务端 Socket = " + socket.getClass());
        // 通过 socket 获得输入流
        InputStream inputStream = socket.getInputStream();
        // 读取输入流里的信息, 转换为字符流
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
        // 读数据并输出
        String s = br.readLine();
        System.out.println(s);
//        byte[] buffer = new byte[1024];
//        int readLen;
//        while((readLen = inputStream.read(buffer)) != -1) {
//            System.out.println(new String(buffer,0,readLen));
//        }
        // 设置结束标记
        socket.shutdownInput();
        // 通过 socket 获得输出流, 转换成字符流
        OutputStream outputStream = socket.getOutputStream();
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream));
        bw.write("copy that 字符流");
        bw.newLine();
        bw.flush();

        // 发送信息
        // outputStream.write("hello, copy that".getBytes(StandardCharsets.UTF_8));


        // 关闭流和相关资源
        bw.close(); // 后打开的先关闭
        br.close();
        socket.close();
        serverSocket.close();
    }
}
  • 客户端
public class SocketTCP03Client {
    public static void main(String[] args) throws IOException {
        // 连接服务器端, 连接本机 IP 的 9999 端口
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
        System.out.println("客户端 socket = " + socket.getClass());
        // 得到和 socket 对象关联的输出流对象
        OutputStream outputStream = socket.getOutputStream();
        // 通过该输出流写入数据到通中
        // outputStream.write("hello, server".getBytes(StandardCharsets.UTF_8));
        // 通过该输出流写入数据到通中, 要转换为字符流
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream));
        // 写入数据
        bw.write("hello, server 字符流");
        // 插入一个换行符, 表示写入的内容结束
        bw.newLine();
        // 手动刷新字符流, 否则写不进去
        bw.flush();
        // 设置结束标记, 不然形成死锁无法创建 inputStream
        // socket.shutdownOutput();
        // 通过 socket 获得输入流, 转换为字符流
        InputStream inputStream = socket.getInputStream();
        // 读取数据
//        byte[] buffer = new byte[1024];
//        int readLen;
//        while ((readLen = inputStream.read(buffer)) != -1) {
//            System.out.println(new String(buffer, 0, readLen));
//        }
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
        String s = br.readLine();
        System.out.println(s);



        // 关闭流和释放资源
        bw.close();
        br.close();
        socket.close();
        System.out.println("客户端退出.... ");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值