最新公告
  • 欢迎您光临欧资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 网络编程网络套接字源IP地址和目的的区别

    网络编程

    网络套接字

    源IP地址和目的IP地址以及源端口号和目的端口号的组合称为网络套接字,用于标识客户端请求的服务器和服务;应用程序可以通过套接字打开、读取、写入和关闭数据,允许应用程序加入网络中的 IO 并与网络中的其他应用程序进行通信。

    传输层实现端到端的通信。每个传输层连接都有两个端点。那么,这个连接的终点是什么?既不是主机的IP地址,也不是应用进程,也不是传输层的协议端口;它是一个插座。每个传输层连接由通信两端的两个端点(即两个套接字)唯一标识。

    IPv6

    根据RFC793的定义:IP地址和端口号的组合构成一个套接字。套接字实际上是一个通信端点。每个套接字都有一个套接字序列号,包括主机的 IP 地址和一个 16 位的主机端口号。该表示以点分十进制形式写在 IP 地址之后。端口号,用冒号或逗号分隔,即:主机IP地址:端口号,例如113.301.151.231:23就是一个socket。

    两个应用程序之间的数据传输是通过套接字完成的。当两个网络应用程序进行通信时,其中一个网络应用程序将要传输的信息写入其所在主机的Socket中,然后该Socket将这些信息通过网络接口卡的传输介质发送给另一台主机。Socket,使这个信息可以传输给其他程序。

    TCP/IP的核心内容封装在操作系统中,对外提供了编程接口。如果应用程序要使用 TCP/IP,可以通过系统提供的 TCP/IP 编程接口来实现。在Windows环境下,网络应用程序编程接口称为Windows Socket,Linux下的Linux socket API存在于头文件sys/socket.h中。

    网络编程

    通过调用套接字接口在进程之间进行通信的编程是网络编程。使用网络编程可以实现同一系统中不同进程之间的通信,也可以通过网络连接实现不同系统中多个进程的通信,如:QQ、微信等。

    正是因为网络编程的出现,才能实现当今大型网络游戏的多人竞技。如果没有网络,无论游戏如何发展,都只会是单机游戏。

    网络编程的三要素

    IP地址:可以确定哪个主机端口号:可以确定主机上的一个进程网络通信协议:制定网络通信和数据交互的规则

    Java 中的网络编程:Java 还为网络编程提供了良好的支持。java中网络编程的api位于java.net包中。

    网络基础

    IP协议

    IP,Internet Protocol的缩写,简称“互联网协议”;是TCP/IP系统中的一种网络层协议,专为计算机网络互连和通信而设计,IP地址是唯一的。

    根据网络通信协议的不同,IP地址有两种:IPv4和IPv6:

    IP地址编址方案将IP地址空间分为A、B、C、D、E五类。其中A、B、C类为基本类,D类、E类用于组播和预留.

    本地 IP 地址

    Java中的IP地址

    在 Java 中,InetAddress 类用于表示 IP 地址。InetAddress 类有两个子类:Inet4Address 类和 Inet6Address 类,分别对应 IPv4 和 IPv6。

    Java中的IP地址

    InetAddress类的使用也很简单,demo如下:

    public class InetAddressDemo {
        public static void main(String[] args) throws Exception {
            InetAddress ip = InetAddress.getLocalHost();
            System.out.println("ip: " + ip.toString());
            System.out.println("hostName: " + ip.getHostName());
            System.out.println("hostAddress: " + ip.getHostAddress());
            System.out.println("localHost: " + InetAddress.getLocalHost());
            System.out.println("isReachable: " + InetAddress.getLocalHost().isReachable(1000));
        }
    }

    运行上述demo的结果如下:

    ip: SHISAN-WIN10/192.168.44.1
    hostName: SHISAN-WIN10
    hostAddress: 192.168.44.1
    localHost: SHISAN-WIN10/192.168.44.1
    isReachable: true

    港口

    端口,英文port的中文名称,常见于各种网络技术文档中,可视为设备与外界通信的出口。端口可以​​分为虚拟端口和物理端口。虚拟端口是指计算机内部或交换机路由器内部的端口linux的通信方式套接字,一般用户是看不到的,如计算机内部的80、21、23等端口;端口是位于设备外部的可见端口linux的通信方式套接字,如电脑主机的RJ45网口,交换机、路由器、集线器等的RJ45口,电话使用的RJ11插座等,都是物理接口。

    协议端口

    如果把IP地址比作一座建筑物,端口就是进出建筑物的门,建筑物可以有多个门;同样,IP地址也可以有多个端口,而且会比门的数量多很多,因为一个IP地址可以有多达65536个端口(65536 = 2^16);端口标记为端口号,只是整数,范围从0到65535(2^16-1),一共65536个。所以端口的使用需要注意:

    协议

    协议(protocol),全称是网络协议,是两台计算机进行通信时必须遵循的一套约定,比如如何建立连接,如何相互识别,如何保证通信顺利完成,等等。网络通信协议的三个要素:语法、语义、时序。只有双方按照通信规则建立连接,才能完成通信。

    语法:协议中要传输的数据和信息的结构或格式;语义:发送什么控制信息,可以完成什么动作,做出什么响应;定时(同步):对事件顺序的详细描述。

    网络模型每一层的网络协议:

    网络模型层中的网络协议

    以下是一些常见的网络协议:

    MIME 编码

    Internet 上有许多不同类型的资源,HTTP 协议应该用 MIME 类型标签标记每种类型的资源,它描述了它传输的资源类型。

    MIME,全称是Multipurpose Internet Mail Extension,即“多用途互联网邮件扩展”,最初是为了解决不同电子邮件系统之间来回移动邮件的问题而设计的,但由于其性能出色,所以,它也延续了下来在HTTP协议中使用,用它来标记资源文件类型。

    MIME 类型是一种文本标记,其内容由主要资源类型和子类型组成,以“/”分隔。在 HTTP 协议中,它由 header 中的 Content-type 字段表示。有数百种常见的 MIME 类型。以下是一些常见的:

    网址,网址,网址

    URI:统一资源标识符(Uniform Resource Identifier,简称URI)是用来标识联网资源名称的字符串,可以在全球范围内唯一标识一个资源。URI 有两种形式,URL 和 URN。

    URL:统一资源定位器,最常见的资源标识符形式,用于在 Internet 上定位资源。它是可以从 Internet 上获取的资源的位置和访问方式的简明表示。明确说明如何从精确、固定的位置获取资源。

    大多数 URL 由三部分组成:

    scheme:这通常是协议头,如:http、https;服务器地址:服务器地址一般指我们常说的域名,如:baidu.com;资源位置:域名后面的部分,如:/index,指定服务器上的资源;

    Internet 上的每个资源都有一个唯一的 URL,它指出文件的位置以及客户端如何处理它。现在几乎所有的 URI 都是 URL,所以通常所说的 URI 就是 URL。

    URN:统一资源名称。URN 用作特定内容的唯一名称,与资源的位置无关。因此,使用 URN,您不必担心由于资源迁移而无法访问。另外,同名可以通过多种网络协议访问资源。

    例如:urn:ietf:rfc:2141 可用于命名 RFC 2141 文档,而不必担心它的位置。

    TCP、UDP

    传输层的 TCP 协议和 UDP 协议在网络编程中经常使用。以下是介绍:

    所有网络编程语言都提供了对 TCP 协议和 UDP 协议的支持,Java 也不例外。以下两个demo用于演示:

    Java中的TCP

    服务器:Server.java

    public class Server {
        public static void main(String[] args) throws Exception {
            String data = "我是tcp的服务端";
            // 创建TCP服务端,指定端口为8888
            ServerSocket serverSocket = new ServerSocket(8888);
            System.out.println("服务端已就绪!");
            // 允许客户端建立连接
            boolean accept = true;
            while (accept) {
                Socket client = serverSocket.accept();
                System.out.println("客户端 : " + client.getInetAddress() + " 已连接。");
                // 通过客户端的输出流,给客户端输出数据
                PrintStream print = new PrintStream(client.getOutputStream());
                print.println(data);
                print.close();
            }
            serverSocket.close();
        }
    }

    客户端:Client.java

    public class Client {
        public static void main(String[] args) throws Exception {
            // 穿件客户端,与服务端建立连接
            Socket client = new Socket("localhost", 8888);
            // 输出服务端输入的数据
            Scanner scanner = new Scanner(client.getInputStream());
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                System.out.println(line);
            }
            scanner.close();
            client.close();
        }
    }

    记得先运行服务端,再运行客户端。否则会出现意想不到的结果。

    Java中的UDP

    发件人:Send.java

    public class Send {
        public static void main(String[] args) throws Exception {
            String data = "我是udp的发送端";
            // 创建发送端,端口为13000
            DatagramSocket sender = new DatagramSocket(13000);
            // 发送数据
            DatagramPacket dp = new DatagramPacket(
                    data.getBytes(), // 发送的数据
                    data.getBytes().length,  // 发送的数据的长度
                    InetAddress.getLocalHost(), // 接收端的ip
                    14000); // 接收端的端口
            sender.send(dp);
            sender.close();
        }
    }

    接收方:Receive.java

    public class Receive {
        public static void main(String[] args) throws Exception {
            // 床架接收端对象
            DatagramSocket receiver = new DatagramSocket(14000);
            byte[] buffer = new byte[1024];
            // 接收数据
            DatagramPacket dp = new DatagramPacket(buffer, 1024);
            receiver.receive(dp);
            // 打印接收到的数据
            String msg = new String(dp.getData(), 0, dp.getLength());
            System.out.println("接收到的数据:" + msg);
        }
    }

    先运行接收器,然后运行发送器。

    结尾。老爷子虽然不认真,但老爷子有才

    站内大部分资源收集于网络,若侵犯了您的合法权益,请联系我们删除!
    欧资源网 » 网络编程网络套接字源IP地址和目的的区别

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    欧资源网
    一个高级程序员模板开发平台

    发表评论