Java - 网络
要事为先,你如果想要在这个行业发展下去的话,实际上三角形的三个点在支撑着你发展,一个是技术、一个是管理(不是说管理别人,是管理你自己的时间,管理你自己的精力)、还有一个就是沟通,注重这三点均衡的发展。
分层有巨大的好处,它能帮我们屏蔽掉一些底层的东西,统一对外接口。
分层思想比喻:就好比你去邮局寄信,你把信给邮局就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 - 网络的更多相关文章
- 20145205 《Java程序设计》实验报告五:Java网络编程及安全
20145205 <Java程序设计>实验报告五:Java网络编程及安全 实验要求 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.客户端中输入明文,利用DES算法加密,D ...
- Java 网络编程学习总结
新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1] 网络编程认识 [2] TCP/IP编程 ...
- Java 网络爬虫获取网页源代码原理及实现
Java 网络爬虫获取网页源代码原理及实现 1.网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL ...
- 20145212 实验五《Java网络编程》
20145212 实验五<Java网络编程> 一.实验内容 1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成 ...
- 20145213《Java程序设计》实验五Java网络编程及安全
20145213<Java程序设计>实验五Java网络编程及安全 实验内容 1.掌握Socket程序的编写. 2.掌握密码技术的使用. 3.设计安全传输系统. 实验预期 1.客户端与服务器 ...
- 20145206《Java程序设计》实验五Java网络编程及安全
20145206<Java程序设计>实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 我和201451 ...
- 20145337实验五Java网络编程及安全
20145337实验五Java网络编程及安全 实验内容 掌握Socket程序的编写 掌握密码技术的使用 设计安全传输系统 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器 ...
- java 网络编程复习(转)
好久没有看过Java网络编程了,现在刚好公司有机会接触,顺便的拾起以前的东西 参照原博客:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942 ...
- JAVA课程实验报告 实验五 Java网络编程及安全
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:韩玉琪 学号:20135317 成绩: 指导教师:娄嘉 ...
- 20145225《Java程序设计》 实验五 Java网络编程及安全
20145225<Java程序设计> 实验五 Java网络编程及安全 实验报告 一.实验内容 基于Java Socket实现安全传输. 基于TCP实现客户端和服务器,结对编程一人负责客户端 ...
随机推荐
- python右键Edit with IDLE
在windows下试用python,Py文件的右键菜单有个Edit with IDLE,虽然这个ide不是那么功能强大,但是胜在方便.对于脚本语言的一般使用来说是足够了.但是有时候,这个菜单就消失了, ...
- @Requestbody@ApiParam @PathVariable @RequestParam三者区别
一.问题描述 由于项目是前后端分离,因此后台使用的是spring boot,做成微服务,只暴露接口.接口设计风格为restful的风格,在get请求下,后台接收参数的注解为RequestBody时会报 ...
- 强制更新客户端Silverlight XAP 文件
在发布小程序更新的时候访问的总是原来的程序,猜想应该是缓存的原因.在网上查找方法 <div id="silverlightControlHost"> <objec ...
- c++11 多线程入门教程(一)
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/10945309.html 最近在找c++服务端开发的实习(大佬们有推荐吗QAQ..),恰好写了一 ...
- PHP面试题基础问题
1.对于大流量的网站,您采用什么样的方法来解决访问量问题? 首先,确认服务器硬件是否足够支持当前的流量 其次,优化数据库访问. 第三,禁止外部的盗链. 第四,控制大文件的下载. 第五,使用不同主机分流 ...
- HTML <pre> 标签
需求 错落有致的规则说明 ps.我真的是一个后端开发... pre 元素中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体.
- OracleJDK与OpenJDK的区别和联系
OpenJDK原是SunMicrosystems公司为Java平台构建的Java开发环境(JDK)的开源版本,完全自由,开放源码.OracleJDK里面包含的JVM是HotSpotVM,HotSpot ...
- ElasticSearch服务器操作命令
在win7环境,进入elasticsearch安装目录的bin目录: 1. elasticsearch.bat 就可以启动elasticsearch了.运行这个插件的好处是:elasticsearch ...
- 让我们把KBEngine玩坏吧!如何定制我们自己的C++函数(一)
为什么不更新kbe warring的代码解读了,因为在我看来那个demo讲完了实体就没东西可讲了,如果专心的看官方文档和PPT的话demo的代码后面没任何难点了已经,单纯的复制黏贴代码实在太过无聊.程 ...
- 玩转Docker之常用API(四)
原文地址:http://accjiyun.cn/wan-zhuan-dockerzhi-chang-yong-api-si/ 任何一个开发的平台都会向开发者开发API,以供开发者更加自由地使用平台所提 ...