资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > Java

网络编程基础

Java 更新时间: 发布时间: 计算机考试归档 最新发布

网络编程基础

一:网络模型:计算机网络之间以何种规则进行通信,就是网络模型研究问题。

网络模型一般是指 :   

OSI(Open System Interconnection开放系统互连)参考模型       

 TCP/IP参考模型(HTTP/HTTPS)

比较重要,必须会背

 

 二:网络通信三要素

IP地址:InetAddress     网络中设备的标识,不易记忆,可用主机名

端口号     用于标识进程的逻辑地址,不同进程的标识

传输协议     通讯的规则     常见协议:TCP,UDP

(1)如何获得ip地址?

 为了方便我们对IP地址的获取和操作,java提供了一个类InetAddress 供我们使用

static InetAddress getByName(String host) 确定主机名称的IP地址。

public String getHostName()获取此IP地址的主机名。

public String getHostAddress()返回文本显示中的IP地址字符串。

public byte[] getAddress()返回此InetAddress对象的原始IP地址。 结果是网络字节顺序:地址的最高位字节在getAddress()[0] 

 public class InternetDemo1 {
    public static void main(String[] args) throws Exception {
        //part1
        InetAddress address = InetAddress.getByName("192.168.2.227");
        System.out.println(address);
        //part2
        String hostName = address.getHostName();
        System.out.println(hostName);
        //part3
        String hostAddress = address.getHostAddress();
        System.out.println(hostAddress);
        //part3
        byte[] address1 = address.getAddress();
        for (byte b : address1) {
            System.out.print(b);
        }

    }
}

 netstat -ano:查看端口号

(2)Socket套接字: 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。

Socket原理机制: 通信的两端都有Socket。 网络通信其实就是Socket间的通信。 数据在两个Socket间通过IO传输。

(3)UDP :将数据源和目的封装成数据包中,不需要建立连接;每个数据报包的大小在限制在64k;因无连接,是不可靠协议;不需要建立连接,速度快

发送端口:

   1、建立发送端的Socket对象
   2、创建数据,并将数据打包
   3、通过调用Socket的发送方法将数据包发出去
   4、释放资源,关闭Socket

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class SendDemo {
    public static void main(String[] args) throws Exception{
        DatagramSocket datagramSocket = new DatagramSocket();
        byte [] bytes="这是发送端数据".getBytes();
        int length=bytes.length;
        InetAddress address = InetAddress.getByName("192.168.2.227");
        //有效端口:0~65535,其中0~1024系统使用或保留端口。
        int port=10000;
        //DatagramPacket(byte[] buf, int length, InetAddress address, int port)
        //构造用于发送长度的分组的数据报包 length指定主机上到指定的端口号。
        DatagramPacket datagramPacket = new DatagramPacket(bytes,length,address,port);
        //void send(DatagramPacket p)
        //从此套接字发送数据报包。
        datagramSocket.send(datagramPacket);
        datagramSocket.close();
    }
}

 UDP接收端接收数据:
            1、创建接收端的Socket对象
            2、创建一个接收包(接收数据容器)
            3、调用Socket的接收方法接收数据  receive()
            4、解析数据包,获取数据,显示在控制台
            5、释放资源,关闭Socket

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class ReveiceDemo {
    public static void main(String[] args) throws Exception{
        //创建接收端的Socket对象
        //DatagramSocket(int port)
        //构造数据报套接字并将其绑定到本地主机上的指定端口。
        DatagramSocket ds = new DatagramSocket(10000);
        byte [] bytes=new byte[1024];
        int length=bytes.length;
        //DatagramPacket(byte[] buf, int length)
        //构造一个 DatagramPacket用于接收长度的数据包 length 。
        DatagramPacket dp = new DatagramPacket(bytes,length);
        ds.receive(dp);//该方法阻塞,直到接收到数据包
        // 返回该数据报发送或接收数据报的计算机的IP地址。
        InetAddress address = dp.getAddress();
        //解析数据包,获取数据,显示在控制台
        //public byte[] getData()返回数据缓冲区。
        byte[] data = dp.getData();
        int length1=data.length;
        String s = new String(data, 0, length1);
        System.out.println("发送端的ip地址是:"+address+"发送来的信息是:"+s);
       // ds.close();正常不用关,这里写的话就结收不到数据了
    }
}

先运行接收端,再运行发送端

练习:写一个输入端当键盘录入数据当时”886“结束传输

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class SendDemo3 {
    public static void main(String[] args) throws Exception{
        DatagramSocket ds = new DatagramSocket();
        BufferedReader bw = new BufferedReader(new InputStreamReader(System.in));
         String len=null;
        while((len=bw.readLine())!=null) {
            if ("886".equals(len)) {
                break;
             }
            DatagramPacket dp = new DatagramPacket(len.getBytes(),len.getBytes().length, InetAddress.getByName("localhost"),10089);
            ds.send(dp);
        }
        ds.close();
    }

}
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class RevericeDemo2 {
    public static void main(String[] args) throws Exception {
        DatagramSocket ds = new DatagramSocket(10089);
        while (true) {
            byte[] bytes = new byte[1024];
            int length = bytes.length;
            DatagramPacket dp = new DatagramPacket(bytes, length);
            ds.receive(dp);//该方法阻塞,直到接收到数据包
            InetAddress address = dp.getAddress();
            byte[] data = dp.getData();
            int length1 = data.length;
            String s = new String(data, 0, length1);
            System.out.println("发送端的ip地址是:" + address + "发送来的信息是:" + s);
        }
    }
}

(4)TCP:建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低 

TCP协议传输发送数据端
        1、创建客户端的Socket对象
            指定服务器的IP和端口,内部自动建立连接
            一旦建立连接成功,说明与服务IO通道形成
        2、获取输出流,往IO通道写数据
        3、释放资源

import java.io.OutputStream;
import java.net.Socket;
public class CilentDemo1 {
    public static void main(String[] args) throws Exception{
        //Socket(String host, int port)
        //创建流套接字并将其连接到指定主机上的指定端口号。
        Socket s = new Socket("192.168.2.227", 10086);
        //获取输出流
        //public OutputStream getOutputStream()throws IOException返回此套接字的输出流。
        OutputStream os = s.getOutputStream();
        os.write("我想睡觉".getBytes());
//        os.close();
       s.close();
    }
}

 TCP协议接收数据服务器端
        1、创建服务器端的Socket对象 ServerSocket
        2、监听客户端连接,返回一个对应的客户端的Socket对象
        3、获取输入流对象,读取数据,显示在控制台上
        4、释放资源 

import java.io.InputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class SeverDemo1 {
    public static void main(String[] args) throws Exception{
         //创建服务器端的Socket对象 ServerSocket
         //ServerSocket(int port)
        ServerSocket ss = new ServerSocket(10086);
        
        Socket a = ss.accept();
        //获取输入流对象,读取数据,显示在控制台上
        //public InputStream getInputStream() 返回此套接字的输入流。
        InputStream is = a.getInputStream();
        byte[] bytes=new byte[1024];
        int length = is.read(bytes);
        String s = new String(bytes, 0, length);
        //获取谁发送的信息,IP
        //public InetAddress getInetAddress()返回套接字所连接的地址。
        InetAddress ip = a.getInetAddress();
        System.out.println(ip+":"+s);
        a.close();
    }
}

同样还是先运行接受端再运行发送端 

转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/354029.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【网络编程基础】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2