采用字符流实现通信

采用字符流实现通信 

客户端:

package src.com.zhang.socket;

import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

public class SocketTcp03Client {
        public static void main(String[] args) throws Exception{
            //1.连接服务器(ip,端口)
            //解读:连接本机的9999端口,如果连接成功,返回Socket对象
            Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
            System.out.println("客户端返回"+Socket.class);
            //2.连接上后,通过Socket.getOutputSream()得到和Socket关联的输出流对象
            OutputStream outputStream=socket.getOutputStream();
            //3.通过输出流写入数据到 数据通道,使用字符流
//            outputStream.write("hello,server".getBytes(StandardCharsets.UTF_8));
            BufferedWriter bufferedWriter=new BufferedWriter(new OutputStreamWriter(outputStream));
            bufferedWriter.write("hello server");
            //插入一个换行符,表示写入的内容结束,但是接收方也需要使用readline来接受数据
            bufferedWriter.newLine();//
            //如果使用的是字符流,需要手动刷新一下,否则数据不会进入数据通道
            bufferedWriter.flush();
            //4.获取和Socket关联的输入流,读取字节流,并显示
            InputStream inputStream=socket.getInputStream();
            byte[] bytes=new byte[1024];
            int len=0;
            while ((len=inputStream.read(bytes))!=-1){
                System.out.println(new String(bytes,0,len));
            }
            //必须关闭流和Socket
            outputStream.close();
            socket.close();

        }
}

服务端:

package src.com.zhang.socket;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

public class SocketTcpServer03 {
    public static void main(String[] args) throws Exception{
        //在本机的9999端口监听,等待连接
        //PS:serverSocket.accept()可以接受多个客户端的并发请求
        ServerSocket serverSocket=new ServerSocket(9999);

        System.out.println("服务端,正在等待连接..");
        //当没有程序连接9999端口,程序会阻塞,等待连接
        Socket socket=serverSocket.accept();

        //如果有客户端连接,则会返回Socket对象,程序继续
        System.out.println("服务端"+socket.getClass());

        //通过getInputStream()获取输入通道的数据
        InputStream inputStream=socket.getInputStream();

        //4.IO读取
//        byte[] buf=new byte[1024];
//        int readlen=0;
//        while ((readlen=inputStream.read(buf))!=-1){
//            System.out.println(new String(buf,0,readlen));
//        }
        BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
        String line = bufferedReader.readLine();
        System.out.println(line);


        //5.获取Socket相关联的输出流
        OutputStream outputStream=socket.getOutputStream();
//        outputStream.write("hello client".getBytes(StandardCharsets.UTF_8));
//        socket.shutdownOutput();

        BufferedWriter bufferedWriter=new BufferedWriter(new OutputStreamWriter(outputStream));
        bufferedWriter.write("hello Client");
        bufferedWriter.newLine();
        bufferedWriter.flush();
        //6.关闭流和Socket
        inputStream.close();
        socket.close();
        serverSocket.close();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值