TCP和UDP

一、InetAddress 类:封装一个IP 的对象
  常用方法:
    getByName(String host):封装一个指定ip获取指定域名的对象 静态 返回 InetAddress 对象
    getLocalHost():封装本机的ip对象 静态 返回 InetAddress 对象
    getHostName():获取主机名
    getHostAddress():获取ip地址
二、UDP 通信
  1、DatagramPacket 类
    构造方法:DatagramPacket(byte[] buf,int length):用来接收数据
         DatagramPacket(byte[] buf,int length,InetAddress address,int port):发送指定长度数组,到指定ip的指定端口号
    常用方法:getAddress():获取机器的IP地址,此数据发送到哪台机器或者从哪台接收
         getPort():获取机器的端口号,此数据发送到哪台机器或者从哪台接收
         getDate():获取传输的数据
         getLength():获取数据的长度
  2、DatagramSocket 类
    构造方法:DatagramSocket():发送数据时使用该构造
         DatagramSocket (int port):接收数据时使用该构造
    常用方法:
         send(DatagramPacket p):发送数据报包
         receive(DategramPacket p):接收数据报包
  3、使用UDP通信

  接收端:

 1 public static void main(String[] args) throws IOException {
 2 //        创建 DatagramSocket 对象 用于 获取数据报包 并指 明端口号
 3         DatagramSocket ds = new DatagramSocket(8888);
 4         byte[] bytes = new byte[1024];
 5         while(true) {
 6 //            创建 DatagramPacket 对象 用于拆包
 7             DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
 8 //            获取数据
 9             ds.receive(dp);
10 //            获取发送者的ip和主机名和端口号
11             String ip = dp.getAddress().getHostAddress();
12             String name = dp.getAddress().getHostName();
13             int port = dp.getPort();
14 //            获取数据
15             byte[] data = dp.getData();
16 //            将数据转字符串
17             System.out.println("ip为" + ip + "端口号为" + port + "发送的消息是" + new String(data, 0, data.length));
18         }
19 //        反复接收的不关闭,不反复的时候关闭
20 //        ds.close();
21     }

  发送端:

 1     public static void main(String[] args) throws IOException {
 2 //        byte[] bytes = "你好呀!".getBytes();
 3 
 4 //        明确ip地址
 5         InetAddress inet = InetAddress.getByName("127.0.0.1");
 6 //         发送数据
 7         DatagramSocket ds = new DatagramSocket();
 8         while (true) {
 9 //            将需要发送的数据转字符串
10             byte[] bytes = new Scanner(System.in).next().getBytes();
11 
12 //            打包
13             DatagramPacket dp = new DatagramPacket(bytes, bytes.length, inet, 8888);
14 //            开始发送
15             ds.send(dp);
16         }
17 //        反复发送的不关闭,不反复的时候关闭
18 //        ds.close();
19     }

 



三、TCP通信
  1、ServerSocket 类 服务器端
    构造方法:ServerSocket(int port);
    常用方法:accept():获取 Socket 对象
         getInetAddress():返回服务器接收的本地地址
  2、Socket 类 客户端
    构造方法:Socket(String host,int port):指定地址和指定端口号
         Socket(InetAddress address,int port):指定 InetAddress 对象和端口号
    常用方法:getPort():获取 Socket对象与服务器端连接的端口号
         getLocalAddress():获取本机的 InetAddress 对象
         close():释放资源
         getInputStream():获取字节输入流,数据存在该流中
         getOutputStream():获取字节树池流,需要发送的数据写入到该流中
3、TCP通信

  服务器端:

 1 public static void main(String[] args) throws IOException {
 2 //        创建服务器对端对象
 3         ServerSocket ss = new ServerSocket(6666);
 4 
 5 //        获取 socket 对象
 6         Socket socket = ss.accept();
 7 //        从 socket 对象中获取 字节输入流
 8         InputStream is = socket.getInputStream();
 9 //        获取字节输出入流的数据
10 
11         byte[] bytes = new byte[1024];
12 //        int len = is.read(bytes);
13 //        System.out.println(new String(bytes, 0, len));
14 //        将 数组转字符串
15         int len = 0;
16         while ((len = is.read(bytes)) != -1) {
17             System.out.println(new String(bytes, 0, len));
18         }
19         
20 //        服务器端给客户端相应
21 
22 //        获取字节输出流,写给客户端相应
23         OutputStream out = socket.getOutputStream();
24 //        写数据    
25         out.write("服务端收到了".getBytes());
26         socket.shutdownOutput();
27 //        释放资源
28         ss.close();
29     }

 

  客户端:

 1 public static void main(String[] args) throws UnknownHostException, IOException {
 2         InetAddress inet = InetAddress.getByName("127.0.0.1");
 3 //        创建客户端 Socket 对象
 4         Socket socket = new Socket(inet, 6666);
 5 //        从 客户端 对象 获取 字节输出流,用于传输数据给客户端
 6         OutputStream out = socket.getOutputStream();
 7         out.write("你好".getBytes());
 8 
 9         socket.shutdownOutput();
10 
11 //        接收服务器的回应
12 
13 //        获取字节输入流 接收服务端给的响应数据
14         InputStream is = socket.getInputStream();
15         byte[] bytes = new byte[1024];
16 //        int len = is.read(bytes);
17 //        System.out.println(new String(bytes, 0, len));
18 
19         int len = 0;
20         while ((len = is.read(bytes)) != -1) {
21             System.out.println(new String(bytes, 0, len));
22         }
23 
24 //        释放资源
25         socket.close();
26     }

 

posted @ 2019-10-29 16:59  养一只Tom猫  阅读(151)  评论(0编辑  收藏  举报