你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

字符流编程

2021/12/15 19:11:56

使用字符流

  1. 编写一个客户端和服务器
  2.  服务端在 9999端口监听
  3. 客户端连接到服务端,发送 "hello, server" ,并接收服务端回发的"hello,client"
  4. 服务端接收到 客户端发送的 信息,输出,并发送 "hello, client",再退出

 客户端

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

/**
 * @author 小小小白白白白
 */
public class Client1 {
    public static void main(String[] args) throws IOException {
        //1 连接服务器端(ip,端口) 这里因为连接的是自己的计算机
        //如果连接的是别的计算机,可以通过域名+端口号
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
        System.out.println("客户端 socket返回="+socket.getClass());
        //2 连接上后生成Socket,通过socket.getOutputStream得到和服务器关联的输出流对象
        OutputStream outputStream = socket.getOutputStream();
        //3 使用字符流写入数据,new OutputStreamWriter是转换流
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
        bufferedWriter.write("hello server 字符流");
        //写入结束的标记,相当于回车,接收的时候也要有对应的readline
        bufferedWriter.newLine();
        //字符流需要手动刷新,数据才能被传输
        bufferedWriter.flush();
        //4 获取输出流
        InputStream inputStream = socket.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String s = bufferedReader.readLine();
        System.out.println(s);
        //关闭流!这里只需要关闭最外层的流即可,最后打开的要先关闭
        bufferedReader.close();
        bufferedWriter.close();
        socket.close();
        System.out.println("传输成功已关闭");
    }
}

服务端

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

/**
 * @author 小小小白白白白
 */
public class Server1 {
    public static void main(String[] args) throws IOException {
        //1 在本机的9999端口监听,等待连接
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("服务器在9999端口监听等待连接...");
        //2 当没有客户端连接9999端口时,程序会堵塞,等待连接
        // 也就是代码执行到这一行就不会向下执行了
        //这个ServerSocket可以通过accept()返回多个socket,实现多个客户端连接服务器
        Socket socket = serverSocket.accept();
        System.out.println("服务器 socket="+socket.getClass());
        //3 通过socket.getInputStream读取客户端写入数据通道的数据,显示
        InputStream inputStream = socket.getInputStream();
        //4 IO读取字符流
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        //与客户端的newLine对应
        String s = bufferedReader.readLine();
        System.out.println(s);
        //5 获取输出流
        OutputStream outputStream = socket.getOutputStream();
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
        bufferedWriter.write("hello client 字符流");
        bufferedWriter.newLine();
        bufferedWriter.flush();
        //关闭流
        bufferedWriter.close();
        bufferedReader.close();
        socket.close();
        serverSocket.close();
    }
}