• java基础 UDP通信 user datagram protocol 用户数据豆协议 TCP transmission control protocol 传输控制协议 多线程TCP


    无连接通信 UDP

    客户端

    package com.swift.test;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.util.Scanner;
    
    /*使用UDP通信编写一个Java程序.要求:获取键盘输入的内容.发送到服务端.服务端接收后.在控制台上打印接收到的内容
    客戶端
        1.创建键盘录入对象.获取键盘录入数据
        2.创建DatagramSocket对象
        3.创建DatagramPacket对象.并封装键盘录入的数据
        4.发送数据
        5.释放流资源
    服務端
        1.创建DatagramSocket对象
        2.创建DatagramPacket对象
        3.接收数据存储到DatagramPacket对象中
        4.获取DatagramPacket对象的内容
        5.在控制台上打印接收到的内容
        6.释放流资源
    */
    
    
    public class DemoUDPClient {
    
        public static void main(String[] args) throws IOException {
    
            Scanner scan=new Scanner(System.in);
            System.out.println("请输入要传达的内容:");
            String str=scan.nextLine();
            DatagramSocket datagramSocket=new DatagramSocket();
            byte[] buf=str.getBytes();
            DatagramPacket datagramPacket=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.105.22"),6464);
            datagramSocket.send(datagramPacket);
            datagramSocket.close();
        }
    
    }

    服务端

    package com.swift.test;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    /*使用UDP通信编写一个Java程序.要求:获取键盘输入的内容.发送到服务端.服务端接收后.在控制台上打印接收到的内容
    客戶端
        1.创建键盘录入对象.获取键盘录入数据
        2.创建DatagramSocket对象
        3.创建DatagramPacket对象.并封装键盘录入的数据
        4.发送数据
        5.释放流资源
    服務端
        1.创建DatagramSocket对象
        2.创建DatagramPacket对象
        3.接收数据存储到DatagramPacket对象中
        4.获取DatagramPacket对象的内容
        5.在控制台上打印接收到的内容
        6.释放流资源
    */
    
    public class DemoUDPServer {
    
        public static void main(String[] args) throws IOException {
    
            DatagramSocket datagramSocket=new DatagramSocket(6464);
            InetAddress ip=InetAddress.getLocalHost();
            String ipString=ip.getHostAddress();
            String nameString=ip.getHostName();
            System.out.println(ipString+" "+nameString);
            byte[] buf=new byte[1024];
            DatagramPacket datagramPacket=new DatagramPacket(buf,1024);
            datagramSocket.receive(datagramPacket);
            System.out.println(new String(buf));
            datagramSocket.close();
            
        }
    
    }

    结果

     有连接通信TCP

    客户端

    package com.swift.test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    
    /*使用socket编写一个Java程序,要求:客户端发送内容“我是客户端”到服务端,服务端接收后,在控制台上打印接收到的内容,并返回内容“我来自服务端”到客户端,客户端接收服务端的发送的内容后将接收内容打印在控制台
    客户端
        1.创建客户端的Socket对象
        2.获取Socket的输出流对象
        3.写数据给服务器
        4.获取Socket的输入流对象
        5.使用输入流,读反馈信息
        6.关闭流资源
    */
    
    public class DemoTCPClient {
    
        public static void main(String[] args) throws IOException {
    
            Socket s=new Socket(InetAddress.getByName("10.254.3.116"),8888);
            OutputStream out=s.getOutputStream();
            byte[] buf="我是客户端".getBytes();
            out.write(buf);
            InputStream in=s.getInputStream();
            byte[] bytes=new byte[128];
            in.read(bytes);
            System.out.println(new String(bytes));
         s.close(); } }

    服务端

    package com.swift.test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /*使用socket编写一个Java程序,要求:客户端发送内容“我是客户端”到服务端,服务端接收后,在控制台上打印接收到的内容,并返回内容“我来自服务端”到客户端,客户端接收服务端的发送的内容后将接收内容打印在控制台
    
    服务器端
        1.创建服务器端ServerSocket对象,指定服务器端端口号
        2.开启服务器,等待着客户端Socket对象的连接,如有客户端连接,返回客户端的Socket对象
        3.通过客户端的Socket对象,获取客户端的输入流,为了实现获取客户端发来的数据
        4.通过客户端的输入流,获取流中的数据
        5.通过客户端的Socket对象,获取客户端的输出流,为了实现给客户端反馈信息
        6.通过客户端的输出流,写数据到流中
        7.关闭流资源*/
    
    public class DemoTCPServer {
    
        public static void main(String[] args) throws IOException {
    
            ServerSocket serverSocket=new ServerSocket(8888);
            InetAddress ip=InetAddress.getLocalHost();
            System.out.println(ip.getHostAddress());
            Socket s=serverSocket.accept();
            InputStream in=s.getInputStream();
            byte[] buf=new byte[128];
            in.read(buf);
            System.out.println(new String(buf));
            OutputStream out=s.getOutputStream();
            out.write("我来自服务端".getBytes());
         serverSocket.close();
         s.close();
    } }

     多线程TCP

    客户端

    package com.swift.test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    
    /*使用socket编写一个Java程序,要求:客户端发送内容“我是客户端”到服务端,服务端接收后,在控制台上打印接收到的内容,并返回内容“我来自服务端”到客户端,客户端接收服务端的发送的内容后将接收内容打印在控制台
    客户端
        1.创建客户端的Socket对象
        2.获取Socket的输出流对象
        3.写数据给服务器
        4.获取Socket的输入流对象
        5.使用输入流,读反馈信息
        6.关闭流资源
    */
    
    public class DemoTCPClient implements Runnable{
    
        @Override
        public void run() {
    
            Socket s = null;
            try {
            s=new Socket(InetAddress.getByName("10.254.3.116"),8888);
            OutputStream out=s.getOutputStream();
            byte[] buf=("I am Client."+InetAddress.getLocalHost().getHostName()).getBytes();
            out.write(buf);
            InputStream in=s.getInputStream();
            byte[] bytes=new byte[128];
            in.read(bytes);
            System.out.println(new String(bytes));
            } catch(Exception e){
                e.printStackTrace();
            } finally {
                try {
                    s.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
    }

    服务端

    package com.swift.test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /*使用socket编写一个Java程序,要求:客户端发送内容“我是客户端”到服务端,服务端接收后,在控制台上打印接收到的内容,并返回内容“我来自服务端”到客户端,客户端接收服务端的发送的内容后将接收内容打印在控制台
    
    服务器端
        1.创建服务器端ServerSocket对象,指定服务器端端口号
        2.开启服务器,等待着客户端Socket对象的连接,如有客户端连接,返回客户端的Socket对象
        3.通过客户端的Socket对象,获取客户端的输入流,为了实现获取客户端发来的数据
        4.通过客户端的输入流,获取流中的数据
        5.通过客户端的Socket对象,获取客户端的输出流,为了实现给客户端反馈信息
        6.通过客户端的输出流,写数据到流中
        7.关闭流资源*/
    
    public class DemoTCPServer {
    
        public static void main(String[] args) throws IOException {
    
            ServerSocket serverSocket = new ServerSocket(8888);
            InetAddress ip = InetAddress.getLocalHost();
            System.out.println(ip.getHostAddress());
    
            while (true) {
                Socket s = serverSocket.accept();
                InputStream in = s.getInputStream();
                byte[] buf = new byte[128];
                in.read(buf);
                System.out.println(new String(buf));
                OutputStream out = s.getOutputStream();
                out.write("I come from Server.".getBytes());
                s.close();
            }
        }
    
    }

    多线程开启多个客户端任务

    package com.swift.test;
    
    public class DemoTCPTest {
    
        public static void main(String[] args) {
    
            DemoTCPClient client=new DemoTCPClient();
            Thread t1=new Thread(client);
            Thread t2=new Thread(client);
            Thread t3=new Thread(client);
            t1.start();
            t2.start();
            t3.start();
        }
    
    }
  • 相关阅读:
    stylelint 安装配置
    使用 jest 测试 react component 的配置,踩坑。
    互联网媒体类型 MIME Type
    react-router 父子路由同时要接收 params 的写法
    fixed 相对于父容器定位
    react 点击空白处隐藏弹出层
    canvas 使用 isPointInPath() 判断鼠标位置是否在绘制的元素上
    JavaScript 缓存基本原理
    简单说明 Virtual DOM 为啥快
    通过阻止 touchstart 事件,解决移动端的 BUG
  • 原文地址:https://www.cnblogs.com/qingyundian/p/8537471.html
Copyright © 2020-2023  润新知