JAVA学习-网络编程,InetAddress类,UDP通信协议,TCP通信协议,发送接收实例

网络编程

在网络通信协议下,实现网络互联的不同计算机上运行的程序间可以进行数据交换
网络编程三要素:

IP地址(找到网络中的计算机)
端口(识别程序)
协议(数据传输需要遵循的连接和通信的规则,常见UDP、TCP协议)

IP地址
IPV4:32位地址,
IPV6 :128位地址,8组16进制;
特殊地址:127.0.0.1;(代表本机地址)

InetAddress类

方法:getHostName() 获取本机名
getHostAddress()获取本机IP地址
代码实例:

    public static void main(String[] args) throws UnknownHostException {
    
    

//        其他

        InetAddress addr = InetAddress.getLocalHost();
        System.out.println("Local HostAddress:"+addr.getHostAddress());
        String hostname = addr.getHostName();
        System.out.println("Local host name: "+hostname);
    }

传输协议

UDP无连接通信协议,面向无连接的通信,发送不确认、接收不会反馈(广泛用于视频、广播)不能保证数据的完整性
TCP协议:面向连接的通信协议,会先建立逻辑连接然后发送信息,每次连接的创建都要做三次握手,保证连接的可靠;(上传文件,下载文件,浏览网络)

UDP通信协议

Datagram Socket来实现UDP的发送和接收数据
步骤:
1、创建发送端对象
2、创建数据并打包
3、调用datagram对象并发送

发送端实例:

package UDP;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;

public class send {
    
    
    public static void main(String[] args) throws IOException {
    
    
//        创建发送端端Socket对象
        DatagramSocket ds = new DatagramSocket();
        BufferedReader br = new BufferedReader(new InputStreamReader((System.in)));
        String line;
        while ((line = br.readLine()) != null) {
    
    
            if ("886".equals(line)) {
    
    
                break;
            }

//        创建数据
            byte[] bys = line.getBytes();
            DatagramPacket dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("127.0.0.1"), 12345);
//        调用DatagramSocket对象端方法发送数据
            ds.send(dp);
        }
        ds.close();
    }
}

接收端实例:

package UDP;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class receive {
    
    
    public static void main(String[] args) throws IOException {
    
    

        DatagramSocket ds = new DatagramSocket(12345);

        while (true){
    
    
        byte[] bys = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bys,bys.length);

        ds.receive(dp);

        System.out.println("number is :"+ new String((dp.getData()),0,dp.getLength()));
        }
//        ds.close();
    }
}

TCP通信协议

在通信的两端形成网络虚拟链路,分为客户端和服务器端;
通过socket产生IO流来进行通信;
发送步骤:
1、创建客户端的socket对象
2、获取输出流写数据;
3、释放资源;

代码实例:
客户端:

package biancheng;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class client {
    
    
    public static void main(String[] args) throws IOException {
    
    
//        创建客户端的Scoket对象
        Socket s = new Socket("127.0.0.1",10000);
//        获取输出流,写数据
        OutputStream os = s.getOutputStream();
        os.write("hello,it's me".getBytes());
//        接收服务器返回
        InputStream is = s.getInputStream();
        byte[] bys = new byte[1024];
        int len = is.read(bys);
        String data = new String(bys,0,len);
        System.out.println("客户端"+data);
//        释放资源
        s.close();
    }
}

服务器端:

package biancheng;


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class server {
    
    
    public static void main(String[] args) throws IOException {
    
    
//        创建服务器端对象
        ServerSocket ss = new ServerSocket(10000);
//        监听客户端连接
        Socket s = ss.accept();
//        获取输入流、读数据,并把数据显示在控制台
        InputStream is = s.getInputStream();
        byte[] bys = new byte[1024];
        int len = is.read(bys);
        String data = new String(bys,0,len);
        System.out.println("服务器"+data);
//        给出反馈
        OutputStream os = s.getOutputStream();
        os.write("数据已经收到".getBytes());
//        释放资源
        ss.close();

    }
}

这里注意:
客户端是先输出数据再读数据;
服务端是先读数据再输出数据;
是相互对应的;

猜你喜欢

转载自blog.csdn.net/weixin_52723971/article/details/110821674