(二十五)

1.网络编程概述

* A:计算机网络
  * 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
* B:网络编程
  * 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。

2.网络编程三要素之IP概述

* 每个设备在网络中的唯一标识
* 每台网络终端在网络中都有一个独立的地址,我们在网络中传输数据就是使用这个地址。
* ipconfig:查看本机IP192.168.17.30
* ping:测试连接192.168.40.62
* 本地回路地址:127.0.0.1 255.255.255.255是广播地址
* IPv4:4个字节组成,4个0-255。大概42亿,30亿都在北美,亚洲4亿。2011年初已经用尽。
* IPv6:8组,每组4个16进制数。
* 1a2b:0000:aaaa:0000:0000:0000:aabb:1f2f
* 1a2b::aaaa:0000:0000:0000:aabb:1f2f
* 1a2b:0000:aaaa::aabb:1f2f
* 1a2b:0000:aaaa::0000:aabb:1f2f
* 1a2b:0000:aaaa:0000::aabb:1f2f

3.网络编程三要素之端口号概述

* 每个程序在设备上的唯一标识
* 每个网络程序都需要绑定一个端口号,传输数据的时候除了确定发到哪台机器上,还要明确发到哪个程序。
* 端口号范围从0-65535
* 编写网络应用就需要绑定一个端口号,尽量使用1024以上的,1024以下的基本上都被系统程序占用了。
* 常用端口
  * mysql: 3306
  * oracle: 1521
  * web: 80
  * tomcat: 8080
  * QQ: 4000
  * feiQ: 2425

4.网络编程三要素协议

* 为计算机网络中进行数据交换而建立的规则、标准或约定的集合。
* UDP
  * 面向无连接,数据不安全,速度快。不区分客户端与服务端。
* TCP
  * 面向连接(三次握手),数据安全,速度略低。分为客户端和服务端。
    * 三次握手: 客户端先向服务端发起请求, 服务端响应请求, 传输数据。

5.Socket通信原理图解

* A:Socket套接字概述:
  * 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
  * 通信的两端都有Socket。
  * 网络通信其实就是Socket间的通信。
  * 数据在两个Socket间通过IO流传输。
  * Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和port。

6.UDP传输

* 1.发送Send
  * 创建DatagramSocket, 随机端口号
  * 创建DatagramPacket, 指定数据, 长度, 地址, 端口
  * 使用DatagramSocket发送DatagramPacket
  * 关闭DatagramSocket
* 2.接收Receive
  * 创建DatagramSocket, 指定端口号
  * 创建DatagramPacket, 指定数组, 长度
  * 使用DatagramSocket接收DatagramPacket
  * 关闭DatagramSocket
  * 从DatagramPacket中获取数据
* 3.接收方获取ip和端口号
  * String ip = packet.getAddress().getHostAddress();
  * int port = packet.getPort();

7.UDP传输优化

* 接收端Receive
        DatagramSocket socket = new DatagramSocket(6666);                        //创建socket相当于创建码头
        DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);        //创建packet相当于创建集装箱

        while(true) {
            socket.receive(packet);                                                //接收货物
            byte[] arr = packet.getData();
            int len = packet.getLength();
            String ip = packet.getAddress().getHostAddress();
            System.out.println(ip + ":" + new String(arr,0,len));
        }
* 发送端Send
        DatagramSocket socket = new DatagramSocket();        //创建socket相当于创建码头
        Scanner sc = new Scanner(System.in);

        while(true) {
            String str = sc.nextLine();
            if("quit".equals(str))
                break;
            DatagramPacket packet =                             //创建packet相当于创建集装箱
                    new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
            socket.send(packet);            //发货
        }
        socket.close();

8.UDP传输多线程

* A发送和接收在一个窗口完成

        public class Demo3_MoreThread {

            /**
             * @param args
             */
            public static void main(String[] args) {
                new Receive().start();

                new Send().start();
            }

        }

        class Receive extends Thread {
            public void run() {
                try {
                    DatagramSocket socket = new DatagramSocket(6666);                    //创建socket相当于创建码头
                    DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);    //创建packet相当于创建集装箱

                    while(true) {
                        socket.receive(packet);                                                //接收货物
                        byte[] arr = packet.getData();
                        int len = packet.getLength();
                        String ip = packet.getAddress().getHostAddress();
                        System.out.println(ip + ":" + new String(arr,0,len));
                    }
                } catch (IOException e) {

                    e.printStackTrace();
                }
            }
        }

        class Send extends Thread {
            public void run() {
                try {
                    DatagramSocket socket = new DatagramSocket();        //创建socket相当于创建码头
                    Scanner sc = new Scanner(System.in);

                    while(true) {
                        String str = sc.nextLine();
                        if("quit".equals(str))
                            break;
                        DatagramPacket packet =                             //创建packet相当于创建集装箱
                                new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
                        socket.send(packet);            //发货
                    }
                    socket.close();
                }  catch (IOException e) {

                    e.printStackTrace();
                }
            }
        }

9.TCP协议

* 1.客户端
  * 创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器
  * 调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流
  * 输入流可以读取服务端输出流写出的数据
  * 输出流可以写出数据到服务端的输入流
* 2.服务端
  * 创建ServerSocket(需要指定端口号)
  * 调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket
  * 调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流
  * 输入流可以读取客户端输出流写出的数据
  * 输出流可以写出数据到客户端的输入流。

10.

时间: 2024-12-14 05:50:03

(二十五)的相关文章

《Motion Design for iOS》(五)

就像之前手环的例子一样,这是另一个在视觉上解释应用数据层级的整体架构的动画.这个动画从一个简单的中心对齐文本菜单开始,当点击My Files的时候,文件夹图标会扩展开来显示那些文件.用户会得到一种菜单就在文件列表背后的感觉,并且觉得他们可以在任何时候点击右下角的菜单按钮回到列表.当点击菜单按钮时,收缩整个文件列表进入之前的文件夹图标然后再次显示菜单. 这是另一个Jakub Autalik设计的非常有趣的动画,之前的里程计东湖也是他创建的.每个界面都使用了多种内置的效果来错开每个视觉元素的显示.歌

CCNA实验二十五 实战多种ACL访问控制  

CCNA实验二十五 实战多种ACL访问控制 环境:Windows XP .Pracket Tracert 5.3 . GNS3.0.7.2 目的:了解ACL作用并熟练在不同环境中配置ACL 说明: ACL是路由器和交换机接口的指令列表,用来控制端口进出的数据包并且可以保护网络,ACL适用于所有的被路由协议,如IP.IPX.AppleTalk等.ACL种类:标准ACL.扩展ACL.命名式ACL.基于时间ACL.自反ACL.动态ACL. 标准的ACL使用 1 ~ 99 以及1300~1999之间的数

攻城狮在路上(叁)Linux(二十五)--- linux内存交换空间(swap)的构建

swap的功能是应付物理内存不足的状况,用硬盘来暂时放置内存中的信息. 对于一般主机,物理内存都差不多够用,所以也就不会用到swap,但是对于服务器而言,当遇到大量网络请求时或许就会用到. 当swap被使用的时候,主机的硬盘灯就会闪烁不停. 本篇介绍两种方式:1.设置一个swap分区   2.创建一个虚拟内存的文件. 一.使用物理分区构建swap: 1.首先是分区: A.fdisk /dev/sda; <== 根据后续提示创建一个分区. B.修改分区的ID,因为fdisk默认将分区的ID作为文件

每日算法之二十五:Divide Two Integers

Divide two integers without using multiplication, division and mod operator. 不使用乘法.除法和求模运算求两个数相除. class Solution { public: long long internalDivide(unsigned long long dividend,unsigned long long divisor) { if(dividend<divisor) return 0; int result =

关于心理的二十五种倾向(查理&amp;#183;芒格)-2

5)避免不一致倾向避免不一致倾向实际上就是人天生就害怕改变.相同是由于人类大脑的生理机制决定的.由于这样的倾向能够带来节省运算空间和能量的优点.这样的抗改变模式的形成,可能的原因例如以下:A) 迅速作出决定对生存来说至关重要,而这样的抗改变模式有助于更快的作出决定;     这里有第四个倾向的因素,对于生存至关重要的反应(遇到生存威胁时),反应一定要快,必须形成固化的模式.这也是我们对于紧急事件的处理常常採用不断反复模拟训练的原因.B) 能够通过群体协作来获得生存优势,假设每一个人总是不停地改变

【管理心得之二十五】组织中的骂名 ----------墙头草

场景再现 ====================== {会议前} 老张:喂,老王.这次的讨论议题你怎么看? 老王:暂时还没有想好,你有什么高见? 老张:这还不简单,以前类似的事发生过. "首先..........其次..........最后........."   你看看怎样? 老王:嗯{点点头} {会议中} 老  张:"方案A 是... ... ... ... " 方案B:"方案B 是... ... ... ... " 方案C:"方

企业搜索引擎开发之连接器connector(二十五)

下面开始具体分析连接器是怎么与连接器实例交互的,这里主要是分析连接器怎么从连接器实例获取数据的(前面文章有涉及基于http协议与连接器的xml格式的交互,连接器对连接器实例的设置都是通过配置文件操作的,具体文件操作尚未详细分析(com.google.enterprise.connector.persist.FileStore类)) 本文以数据库连接器实例为例来分析,数据库类型连接器是通过调用mybatis(sqlmap框架)组件与数据库进行操作的,我们通过前端提交的数据库连接器实例表单信息最终存

二十五、防止表单重复提交

二十五.防止表单重复提交 防止表单重复提交: 有两种方式: 利用重定向<result type = "redirect"/> 使用拦截器 编写jsp页面 <s:form action="regist"> ????????<s:textfield name="name" label="姓名"></s:textfield> ????????<s:token/> ?????

二十五六岁的姑娘

随着时间的推移,我在慢慢的长高,长大,随之而来的责任也越来越重.如果把一个人的一生当做一天来看,那么无疑我已经走过一开始黎明,和初升朝阳的时期了……哪些一切美好希望的寄托已经不再属于我这个年纪该有的了.唯一能做的就是面对现实,到了该吃饭的时间我饿了就是饿了,要吃饭!我感觉我就是处于那个该吃饭时间. 二十五六岁的姑娘应该要有自己的一技之长了,虽然说一切只要想学都还来得及,可是时间不会给你太多准备和努力,只要一眨眼你错过了,那么也许是一辈子的遗憾又或者是那种一切太迟的吃力和无奈! 二十五六岁的姑娘要

Bootstrap &lt;基础二十五&gt;警告(Alerts)

警告(Alerts)以及 Bootstrap 所提供的用于警告的 class.警告(Alerts)向用户提供了一种定义消息样式的方式.它们为典型的用户操作提供了上下文信息反馈. 您可以为警告框添加一个可选的关闭按钮.为了创建一个内联的可取消的警告框,请使用 警告(Alerts) jQuery 插件. 您可以通过创建一个 <div>,并向其添加一个 .alert class 和四个上下文 class(即 .alert-success..alert-info..alert-warning..ale