网络编程---UDP丶TCP

版权声明:如需转载或引用请声明原文网址 https://blog.csdn.net/u013087359/article/details/81474310

一.UDP

UDP:面向无连接通信(发送端不需接收端确认是否能接收),数据不安全,效率高

1.常用方法

InetAddress
  • static InetAddress getLocalHost() 获取本地主机
  • static InetAddress getByName(String host) 根据域名或IP获取主机
  • String getHostName() 获取主机名
  • String getHostAddress() 获取IP地址
DatagramPacket
  • DatagramPacket(byte[] buf, int length) 构造缓冲区接收读取指定长度的数据包
  • int getLength() 获取接收的数据包的大小
  • InetAddress getAddress() 获取发送方的IP地址
  • int getPort() 获取发送方的端口号
  • DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造发送的数据包,并设置接受者的IP地址和端口
DatagramSocket
  • DatagramSocket() 空构造
  • DatagramSocket(int port) 创建指定接受者端口的套接字对象
  • void send(DatagramPacket p) 发送数据包
  • void receive(DatagramPacket p) 接收数据包
  • void close() 关闭套接字

2.接收方

    /* 测试时应先启动接收方,再启动发送方 */

    //用于接收数据的缓冲区
    byte[] data=new byte[1024];

    //创建数据包对象
    DatagramPacket dp=new DatagramPacket(data, data.length);

    //创建套接字对象,设置接收方端口为3000
    DatagramSocket ds=new DatagramSocket(3000);

    //接收数据包
    ds.receive(dp);

    //获取发送者的IP地址
    String senderIP=dp.getAddress().getHostAddress();

    //获取发送者的端口号
    int senderPort=dp.getPort();

    //获取数据包的大小
    int length=dp.getLength();

    System.out.println(senderIP+":"+senderPort+"..."+new String(data,0,length));

    //关闭资源
    ds.close();

3.发送方

    String msg="你好";
    byte[] data=msg.getBytes();

    //接收者IP地址
    InetAddress receiverIP=InetAddress.getByName("127.0.0.1");

    //接收者端口号
    int receiverPort=3000;

    //创建数据包
    DatagramPacket dp=new DatagramPacket(data, data.length,receiverIP,receiverPort);

    //创建套接字对象
    DatagramSocket ds=new DatagramSocket();

    //发送数据包
    ds.send(dp);

    //关闭资源
    ds.close();

二.TCP

TCP:面向有连接通信,三次握手,数据安全,效率较低,区分客户端与服务器端

1.常用方法

Socket
  • Socket(String host, int port) 创建客户端的套接字对象,并设置需要访问的服务器的IP和端口
  • OutputStream getOutputStream() 获取输出流,用于客户端发送数据或服务器端响应数据
  • InputStream getInputStream() 获取输入流,用于读取客户端发送的数据或服务器端响应的数据
    -void close() 关闭套接字
ServerSocket
  • ServerSocket(int port) 创建服务器端的套接字对象,并绑定端口号
  • Socket accept() 监听并接受客户端的套接字
  • void close() 关闭套接字

2.服务器端

    //创建服务器端的套接字对象,并绑定端口号
    ServerSocket server=new ServerSocket(4000);

    //监听并接受客户端的套接字
    Socket socket= server.accept();

    //获取客户端发送数据的输入流
    InputStream in=socket.getInputStream();

    byte[] data=new byte[1024];

    //读取客户端发送的数据
    int len=in.read(data);
    String msg=new String(data,0,len);
    System.out.println(msg);
    if(msg.equals("我要登录")){
        //获取服务器端响应给客户端的输出流
        OutputStream out=socket.getOutputStream();
        //输出数据到客户端
        out.write("登录成功".getBytes());
    }

    //关闭资源
    socket.close();
    server.close();

3.客户端

    //创建客户端的套接字对象,并设置需要访问的服务器的IP和端口
    Socket socket=new Socket("127.0.0.1", 4000);

    //获取发送数据到服务器端的输出流
    OutputStream out= socket.getOutputStream();

    //发送数据到服务器端
    out.write("我要登录".getBytes());

    //获取服务器端响应返回数据的输入流
    InputStream in=socket.getInputStream();
    byte[] data=new byte[1024];

    //读取服务器端返回的数据
    int len=in.read(data);

    System.out.println(new String(data,0,len));

    //关闭资源
    socket.close();

猜你喜欢

转载自blog.csdn.net/u013087359/article/details/81474310
今日推荐