zoukankan      html  css  js  c++  java
  • Java网络编程(二)

    1.Socket和ServerSocket类

    (1)套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个套接字,并尝试连接服务器的套接字。当连接建立时,服务器会创建一个Socket对象。客户端和服务器现在可以通过对Socket对象的写入和读取来进行进行通信。java.net.Socket类代表一个套接字,并且java.net.ServerSocket类为服务器程序提供了一种来监听客户端,并与他们建立连接的机制。以下步骤在两台计算机之间使用套接字建立TCP连接时会出现:

    • 服务器实例化一个ServerSocket对象,表示通过服务器上的端口通信。
    • 服务器调用 ServerSocket类 的accept()方法,该方法将一直等待,直到客户端连接到服务器上给定的端口。
    • 服务器正在等待时,一个客户端实例化一个Socket对象,指定服务器名称和端口号来请求连接。
    • Socket类的构造函数试图将客户端连接到指定的服务器和端口号。如果通信被建立,则在客户端创建一个Socket对象能够与服务器进行通信。
    • 在服务器端,accept()方法返回服务器上一个新的socket引用,该socket连接到客户端的socket。

    连接建立后,通过使用I/O流在进行通信。每一个socket都有一个输出流和一个输入流。客户端的输出流连接到服务器端的输入流,而客户端的输入流连接到服务器端的输出流。

    (2)

         

    Socket 类的方法

    java.net.Socket类代表客户端和服务器都用来互相沟通的套接字。客户端要获取一个Socket对象通过实例化 ,而 服务器获得一个Socket对象则通过accept()方法的返回值。

    Socket类有五个构造方法.

    2.DatagramSocket类和DatagramSocket类

    (1)java中通过两个类来实现UDP协议顶层的数据报:DatagramPacket对象是数据容器,DatagramSocket是用来发送和接受DatagramPacket的套接字。采用UDP通信机制下,在发送信息时,首先要将数据打包,然后将打包好的数据包发送目的地。在接收信息时,首先接收别人发来的数据报,然后查看数据报中的内容。

    (2)DatagramPacket类

           要发送或接收数据报,需要用DatagramPacket类将数据打包,即用DatagramPacket类创建一个对象,称为数据包。

             重要的构造方法:

             DatagramPacket(byte[] buf,int length)   构造数据包对象,用来接收长度为length的数据包

             DatagramPacket(byte[] buf,int length,InetAddress address,int port)  构造数据包,用来将length长度的数据包发送到指定主机上的指定端口号

             DatagramPacket(byte[] buf,int offset,int length)

             DatagramPacket(byte[] buf,int offset,int length,InetAddress address,int port)

             DatagramPacket(byte[] buf,int offset,int length,SocketAddress address)

             DatagramPacket(byte[] buf,int length,SocketAddress address)

            常用方法:

            InetAddress getAddress()   返回某台机器的IP地址,此数据报是将要发往该主机或是从该主机接收到的

            byte[] getData()    返回数据缓冲区

            int getLength()    返回将要发送或是接收的数据包的数据长度

            SocketAddress getSocketAddress() 获取要将此包发送到的或是发出此数据报的远程主机的SocketAddress(通常为IP地址+端口号)

            void setAddress(InetAddress iaddr) 设置要将此数据报发往的那台机器的IP地址

            void setData(byte[] buf)  为此包设置数据缓冲区

          DatagramSocket类

          DatagramSocket类是用来发送和接收数据包的套接字,负责将打包的数据包发送到目的地,或是从目的地接收数据包

             重要的构造方法

             DatagramSocket(int port)   创建数据报套接字并将其绑定到本地主机上的指定的端口

             常用方法

             void receive(DatagramPacket p)  从此套接字接收数据报包

             void send(DatagramPacket p)  从此套接字发送数据包

    (3)代码实现

    //将“你好”封装成数据包,发送到目的主机“www.baidu.com”,端口号为2016上
    byte buff[] = "你好".getByte();  
    InetAddress destAddress = InetAddress.getByName("www.baidu.com");  
    DatagramPacket dataPacket = new DatagramPacket(buff,buff.length,destAddress,2016);  
    DatagramSocket sendSocket = new DatagramSocket();  
    sendSocket.send(dataPacket);  
    
    //接收外界发送到本机2016号端口的数据包
    byte buff[] = new byte[8192];  
    DatagramPacket receivePacket = new DatagramPacket(buff,buff.length);  
    DatagramSocket receiveSocket = new DatagramSocket(2016);  
    receiveSocket.receive(receivePacket);  
    int length = receivePacket.getLength();  
    String message = new String(receivePacket.getData(),0,length);  
    System.out.println(message);
  • 相关阅读:
    C# 操作Excel,使用EPPlus
    结构型设计模式之代理模式(Proxy)
    结构型设计模式之组合模式(Composite)
    结构型设计模式之桥接模式(Bridge)
    C#操作windows事件日志项
    C#操作XML序列化与反序列化
    日志组件Log4Net
    UI Automation 简介
    Selenium
    Selenium
  • 原文地址:https://www.cnblogs.com/bukekangli/p/4003699.html
Copyright © 2011-2022 走看看