TCP通信(四)上

简介: TCP通信(四)

一. TCP 通信所用到的类


一.一 ServerSocket 服务器类


是服务器端所要用到的类。


一.一.一 构造方法


一.一.一.一 方法


image.png


一.一.一.二 演示构造方法


 @Test
    public void conTest() throws Exception{
        //放置端口号, 监听9999端口
        ServerSocket serverSocket=new ServerSocket(9999);
    }


一.一.二 其他方法


image.png


一.二 Socket 客户端类


一.二.一 构造方法


一.二.一.一 方法


image.png


一.二.一.二 演示构造方法


   @Test
    public void conTest() throws Exception{
        //第一种, 传入主机名和端口号。 注意,这个端口号是服务器的那个监听端口
        Socket socket=new Socket("localhost",9999);
        //第二种,传入地址对象
        InetAddress inetAddress=InetAddress.getByName("localhost");
        Socket socket1=new Socket(inetAddress,9999);
    }


一.二.二 其他方法


image.png


一.三 演示服务器和客户端


一.三.一 服务器端


 @Test
    public void serverTest() throws Exception{
        System.out.println("服务器启动中");
        ServerSocket serverSocket=new ServerSocket(9999);
        //阻塞式接收
        Socket client=serverSocket.accept();
        System.out.println("端口:"+serverSocket.getLocalPort());
        System.out.println("连接一个客户端程序");
    }


一.三.二 客户端


 @Test
    public void clientTest() throws Exception{
        System.out.println("启动客户端");
        Socket socket=new Socket("localhost",9999);
    }


一.三.三 测试运行


先运行服务器端, 查看控制台输出,


20200629091724710.png


线程一直在阻塞。


再运行客户端


20200629091729698.png


这个时候,再去查询一下服务器端的控制台


20200629091737589.png


会往下运行,接收到客户端的对象信息。


二. 演示各种 TCP 通信


TCP 通信的情况,与 UDP 通信的情况,基本是一样的。


二.一 演示单条字符串


二.一.一 客户端


 @Test
    public void client2Test() throws Exception{
        System.out.println("启动客户端,发送单条数据");
        Socket socket=new Socket("localhost",9999);
        //发送数据
        //客户端的输入
        OutputStream outputStream= socket.getOutputStream();
        //写入单条数据
       outputStream.write("两个蝴蝶飞,你好啊".getBytes());
       outputStream.close();
       socket.close();
    }


二.一.二 服务器端


 @Test
    public void server2Test() throws Exception{
        System.out.println("服务器启动中");
        ServerSocket serverSocket=new ServerSocket(9999);
        //阻塞式接收
        Socket client=serverSocket.accept();
        System.out.println("连接一个客户端程序");
        //得到输入流
        InputStream inputStream=client.getInputStream();
        byte[]  bytes=new byte[1024];
        //读取内容,放置到 bytes字节数组里面
        int len=inputStream.read(bytes);
        System.out.println("获取客户端传递过来的内容:"+new String(bytes,0,len));
    }


二.一.三 运行程序


先启动服务器,再启动客户端


2020062909174737.png


二.二 发送多条不同类型的数据


二.二.一 客户端


    @Test
    public void client3Test() throws Exception{
        System.out.println("启动客户端,发送多条不同类型的数据");
        Socket socket=new Socket("localhost",9999);
        //发送数据
        //客户端的输入
        OutputStream outputStream= socket.getOutputStream();
        DataOutputStream dataOutputStream=new DataOutputStream(outputStream);
        //发送字符串
        dataOutputStream.writeUTF("两个蝴蝶飞");
        //发送int 类型
        dataOutputStream.writeInt(24);
        //发送字符串
        dataOutputStream.writeUTF("一个快乐的程序员");
        dataOutputStream.flush();
        socket.close();
    }


二.二.二 服务器端


 @Test
    public void server3Test() throws Exception{
        System.out.println("服务器启动中");
        ServerSocket serverSocket=new ServerSocket(9999);
        //阻塞式接收
        Socket client=serverSocket.accept();
        System.out.println("连接一个客户端程序,接收多条数据");
        InputStream inputStream=client.getInputStream();
        DataInputStream dataInputStream=new DataInputStream(inputStream);
        //接收字符串
        String name=dataInputStream.readUTF();
        //接收 int 类型
        int age= dataInputStream.readInt();
        //接收 字符串 
        String desc=dataInputStream.readUTF();
        System.out.printf("姓名是:%s,年龄是:%d,描述是:%s",name,age,desc);
    }


二.二.三 运行程序


20200629091754262.png


二.三 发送对象数据


二.三.一 客户端


  @Test
    public void client3ObjectTest() throws Exception{
        System.out.println("启动客户端,发送多条对象数据");
        Socket socket=new Socket("localhost",9999);
        //发送数据
        //客户端的输入
        OutputStream outputStream= socket.getOutputStream();
        ObjectOutputStream objectOutputStream=new ObjectOutputStream(new BufferedOutputStream(outputStream));
        //放入对象
        Person person=new Person();
        person.setId(1);
        person.setName("两个蝴蝶飞");
        person.setSex('男');
        person.setAge(24);
        person.setDesc("一个快乐的程序员");
        objectOutputStream.writeObject(person);
        //放置日期
        objectOutputStream.writeObject(new Date());
        //一定不要忘记刷新
        objectOutputStream.flush();
        socket.close();
    }


二.三.二 服务器端


@Test
    public void server3ObjectTest() throws Exception{
        System.out.println("服务器启动中");
        ServerSocket serverSocket=new ServerSocket(9999);
        //阻塞式接收
        Socket client=serverSocket.accept();
        System.out.println("连接一个客户端程序,接收对象数据");
        InputStream inputStream=client.getInputStream();
        ObjectInputStream objectInputStream=new ObjectInputStream(new BufferedInputStream(inputStream));
        //读取数据
        Object obj1=objectInputStream.readObject();
        if(obj1 instanceof Person){
            Person person=(Person)obj1;
            System.out.println(person.toString());
        }else{
            System.out.println("接收格式有误");
        }
        Object obj2=objectInputStream.readObject();
        if(obj2 instanceof Date){
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
            System.out.println("日期:"+sdf.format((Date)obj2));
        }else{
            System.out.println("接收格式有误");
        }
    }


二.三.三 测试运行


先启动服务器,再启动客户端


20200629091802503.png



相关文章
|
网络协议 物联网 开发者
NB-IoT 通信之 TCP 收发数据 | 学习笔记
快速学习 NB-IoT 通信之 TCP 收发数据
930 0
NB-IoT 通信之 TCP 收发数据 | 学习笔记
|
1月前
|
网络协议 安全 Java
Java网络编程入门指南:TCP/IP协议与Socket通信
Java网络编程入门指南:TCP/IP协议与Socket通信
98 1
|
8月前
|
SQL 网络协议 前端开发
🚀超级简单的图解TCP/IP,看不懂来打我:OSI模型与通信示例🚀
🚀超级简单的图解TCP/IP,看不懂来打我:OSI模型与通信示例🚀
|
监控 网络协议 安全
一文了解HTTP、HTTPS、TCP、UDP、Websocket(论点:概念、通信流程、异同点、应用领域)
一文了解HTTP、HTTPS、TCP、UDP、Websocket(论点:概念、通信流程、异同点、应用领域)
|
网络协议
Netty实现TCP通信
Netty实现TCP通信
|
网络协议
TCP编程中的客户端与服务端的通信实现
TCP编程中的客户端与服务端的通信实现
113 0
|
网络协议 Unix Linux
linux网络编程(三) TCP通信时序与多进程/线程并发服务器的编写
linux网络编程(三) TCP通信时序与多进程/线程并发服务器的编写
297 0
linux网络编程(三) TCP通信时序与多进程/线程并发服务器的编写
|
机器学习/深度学习 网络协议 机器人
socket库:Python实现TCP/IP客户和服务器通信
socket库:Python实现TCP/IP客户和服务器通信
454 0
socket库:Python实现TCP/IP客户和服务器通信
|
网络协议
套接字编程:TCP通信程序
套接字编程:TCP通信程序
144 0
|
网络协议
网络通信学习笔记(三)---TCP通信及文件上传
网络通信学习笔记(三)---TCP通信及文件上传
网络通信学习笔记(三)---TCP通信及文件上传