要事为先,你如果想要在这个行业发展下去的话,实际上三角形的三个点在支撑着你发展,一个是技术、一个是管理(不是说管理别人,是管理你自己的时间,管理你自己的精力)、还有一个就是沟通,注重这三点均衡的发展。

分层有巨大的好处,它能帮我们屏蔽掉一些底层的东西,统一对外接口。

分层思想比喻:就好比你去邮局寄信,你把信给邮局就OK了,至于邮局是如何寄到目的地的,是汽车还是飞机还是火车,你不用去管。

暂时只要记住一点就可:IP协议给我们做的最大的一个贡献就是它能保证给我们提供独一无二的IP地址,目前知道这点就行了,想要更透彻的了解网络底层,推荐一本书《TCP/IP详解》

端口号(两个字节,65536个端口)用来区分计算机上运行的不同的应用程序,某端口一旦被该程序占用,将不能被被其他程序使用,1024以下的是系统使用的端口号,普通应用程序最好不要占,因为系统可能会随时征用。

80:HTML默认端口

21:FTP默认端口

25:SMTP默认端口

110:POP3默认端口

端口号又分为两种:一种是TCP的端口,一种是UDP的端口,都是65536个端口,而且各自是各自的,TCP的8888端口与UDP的8888端口,它们两个不是一回事

网络应用程序在启动的时候应该是先启Server再启Client。

Server端是阻塞式的运行,它在等Client端连进来,所以一般是不会挂的,运行时绑定在一个端口上监听。

Client连入Server的端口号由系统随便找一个,没必要绑定在一个端口上。

连接:TestServer.java/TestClient.java:

java.net.Socket.getInetAddress():此方法获得Client端的IP。

java.net.Socket.getPort():此方法获得Client端的端口。

通话:TestSockServer.java/TestSockClient.java

Server端先读再写的,Client端就要先写再读。

学生作品:talkserver.java/talkclient.java

 

 

 

 

补充说明:

1、 UDP从严格意义上来讲,没有Server和Client这种概念,因为它不区分Server的Socket或Client的Socket,对于UDP来说,它的Socket也是一个插座,但是这个插座是无线连接,不是说先得连上一根线,咱们俩之间有通道了我才能发数据。

2、 既然你要接收一个对方发过来的包裹,你总得有地方接收,那么这个地方你必须先分配好,用一个小包包接收对方发过来的一个小包包数据,因为对方发过来的是一堆数据包,你接收在什么地方?你总得撑一个包裹开来,把一个包裹撑开来接收对方的这些数据包;那么Java代码中经常这样实现这个接收的包裹:byte buf[] = new byte[ 1024 ];,代表在内存中分配1024个字节,用来接收对方发过来的数据,但是你不能直接操作这个buf数组来接收,一般的写法是这样:DatagramPacket dp = new DatagramPacket( buf, buf.lenth );,dp才是包裹,用它来接收对方发过来的东西,但实际上是接收过来的数据存在哪呢?存在了这个buf数组里边儿,具体我占这个buf可以占多少呢,buf.length就是表示我把整个buf我全占了

 

例:TestUDPServer.java/TestUDPClient.java

java.net.DatagramSocket.receive( java.net.DatagramPacket dp )表示我这个socket和只要接收到数据,我就给它扔包裹(dp)里

java.net.DatagramPacket.getLength()表示我这个包裹里实际上收了多少个数据,buf.lenth只是我这个包裹总共可以收多少个数据,但实际上我有可能只收了2个。

java.net.DatagramPacket( byte[] buf, int length, java.net.SocketAddress address )表示根据指定的数据存放位置、数据长度、Socket地址来构造一个包裹,用来装准备发送出去的数据小包。

java.net.InetSocketAddress( String hostname, int port )这是一个实现了java.net.SocketAddress接口的网络Socket类,表示根据指定的主机名(也就是IP地址)、端口,构造一个网络Socket。

补充说明:有人就问了,咱们原来用TCP发数据,通过管道直接就发过去了,根本不要写地址,你这个UDP为什么还要写这个地址呢?因为TCP发数据是建立在互相已连接的基础上(可靠),所以直接能找到目标地址,而UDP本身没有连接,这外包裹你扔出去就扔出去了,那么包裹在网络上传输的过程中由路由器接收它,你路由器总得知道这个包裹它下一步要跳到哪儿去对不对啊,它才好给你选择这个路径,所以每一包UDP的数据你必须得告诉它到底要把这东西发到哪里去

对于服务端来说,TCP是java.net.ServerSocket.accept(),表示接受、承认,此服务端的ServerSocket会在它所在的端口上等待客户端的Socket连入,此方法会有一个客户端socket的返回值,一旦接受到一个客户端Socket就与之建立通信管道(也就是指的输入/输出流),便可以互相发送数据,而UDP是java.net.DatagramSocket.receive( java.net.DatagramPacket dp ),表示接收、收到,此服务端的DatagramSocket会在它所在的端口上接收客户端发送给它的数据包,此方法无返回值,一旦接收到一个客户端的数据包(DatagramPacket),就将其放入先前指定的内存区域,并给予处理

对于客户端来说,TCP是只要连接上服务端,并与之建立通信管道后,便可以发送数据,而UDP是不需要连接上服务端便可以发送数据,是无连接发送(注意:它发送的是一个数据包(DatagramPacket),也就说扔出去就OK,至于服务器是否接收,它不管)

Java - 网络的更多相关文章

  1. 20145205 《Java程序设计》实验报告五:Java网络编程及安全

    20145205 <Java程序设计>实验报告五:Java网络编程及安全 实验要求 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.客户端中输入明文,利用DES算法加密,D ...

  2. Java 网络编程学习总结

    新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1]    网络编程认识                [2]  TCP/IP编程 ...

  3. Java 网络爬虫获取网页源代码原理及实现

    Java 网络爬虫获取网页源代码原理及实现 1.网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL ...

  4. 20145212 实验五《Java网络编程》

    20145212 实验五<Java网络编程> 一.实验内容 1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成 ...

  5. 20145213《Java程序设计》实验五Java网络编程及安全

    20145213<Java程序设计>实验五Java网络编程及安全 实验内容 1.掌握Socket程序的编写. 2.掌握密码技术的使用. 3.设计安全传输系统. 实验预期 1.客户端与服务器 ...

  6. 20145206《Java程序设计》实验五Java网络编程及安全

    20145206<Java程序设计>实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 我和201451 ...

  7. 20145337实验五Java网络编程及安全

    20145337实验五Java网络编程及安全 实验内容 掌握Socket程序的编写 掌握密码技术的使用 设计安全传输系统 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器 ...

  8. java 网络编程复习(转)

    好久没有看过Java网络编程了,现在刚好公司有机会接触,顺便的拾起以前的东西 参照原博客:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942 ...

  9. JAVA课程实验报告 实验五 Java网络编程及安全

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

  10. 20145225《Java程序设计》 实验五 Java网络编程及安全

    20145225<Java程序设计> 实验五 Java网络编程及安全 实验报告 一.实验内容 基于Java Socket实现安全传输. 基于TCP实现客户端和服务器,结对编程一人负责客户端 ...

随机推荐

  1. Poj 2096 (dp求期望 入门)

    / dp求期望的题. 题意:一个软件有s个子系统,会产生n种bug. 某人一天发现一个bug,这个bug属于某种bug,发生在某个子系统中. 求找到所有的n种bug,且每个子系统都找到bug,这样所要 ...

  2. c#spinLock使用

        版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u011915028/article/details/53011811 一下解释摘自msdn  ...

  3. about 字节

    关于由于赋值导致字节的截断.字节扩展及数据类型的提升: 一.字节截断:int----->char 当一个字节(8位)放不下时,出现截断,直接取(最后一个字节)最后面面8位. 例如:1000000 ...

  4. 精心收集的SSH框架的面试题汇总

    Hibernate工作原理及为什么要用? 原理: 1. 读取并解析配置文件 2. 读取并解析映射信息,创建SessionFactory 3. 打开Sesssion 4. 创建事务Transation ...

  5. windows 安装python

    前言: Windows 中直接使用Python真的是心累 安装vs 2017(最好是最新版的, 因为python依赖于一些vs提供的包) 下载最新的python的安装程序 安装完毕之后, 不像Linu ...

  6. OpenCV之cvAddWeighted直接C语言实现版addWeighted,应对上下平滑融合拼接

    关于OpenCV中的cvAddWeighted的介绍可参见<opencv中的cvAddWeighted函数> cvAddWeighted有个问题,它只能实现两张图片的直接融合,往往产生明显 ...

  7. fish 常用主题推荐

    在安装fish的前提下 omf install zish omf theme zish zish

  8. 【MFC】获取文件大小的方法

    [转载]原文地址:http://blog.csdn.net/coderwu/article/details/5652056 MFC 下可以通过 CFileStatus 获取文件大小. ULONGLON ...

  9. C++编写字符串类CNString,该类有默认构造函数、类的拷贝函数、类的析构函数及运算符重载

    编码实现字符串类CNString,该类有默认构造函数.类的拷贝函数.类的析构函数及运算符重载,需实现以下“=”运算符.“+”运算.“[]”运算符.“<”运算符及“>”运算符及“==”运算符 ...

  10. jquery-weui picker组件实现只选择年月

    var date = new Date() var month = date.getMonth()+1 //获取当前月份 $('#selectTime').picker({ toolbarTempla ...