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实现客户端和服务器,结对编程一人负责客户端 ...
随机推荐
- Django 02 url路由配置及渲染方式
Django 02 url路由配置及渲染方式 一.URL #URL #(Uniform Resoure Locator) 统一资源定位符:对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是 ...
- DropDownList 不能绑定多个值错误!
ListItem item = new ListItem("--请选择--",""); ddlstPurchaser.Items.Insert(0, item) ...
- 阿里巴巴Java开发手册_不建议在循环体中使用+进行字符串拼接
18. [推荐]循环体内,字符串的连接方式,使用StringBuilder的append方法进行扩展. 说明:下例中,反编译出的字节码文件显示每次循环都会new出一个StringBuilder对象,然 ...
- UVALive - 4223(hdu 2926)
---恢复内容开始--- 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2962 Trucking Time Limit: 20000/10000 MS ...
- java里如何实现对数组中的元素反转[4, 1, 8, 7, 3, 8, 2]变成 [2, 8, 3, 7, 8, 1, 4]
不多说,直接上干货! 给定一个数组,对其进行反转. {3,1,6,5,8,2} --> {2,8,5,6,1,3}; 其实就是头尾元素的位置置换. package zhouls.bigdata. ...
- selenium常用方法,简版介绍
WebElement 接口共计16个------------接口 代表一个HTML元素.通常,所有与页面交互有关的有趣操作都将通过此界面执行. void clear() void click() We ...
- Java实例学习——企业进销存管理系统(1)
Java实例学习——企业进销存管理系统(1) (本实例为书上实例,我所记录的是我的学习过程) 开始时间:2月12日 完成时间:暂未完成 2月12日—选择企业进销存管理系统 选择企业进销存管理系统这一实 ...
- C#获得字符串首字符字母(大写)
/// <summary> /// 获得字符串首字符字母(大写): /// </summary> /// <param name="cnChar"&g ...
- MyBatis总结与复习
Spring 主流框架 依赖注入容器/AOP实现 声明式事务 简化JAVAEE应用 粘合剂,将大家组装到一起 SpringMVC 1. 结构最清晰的MVC Model2实现 2. 高度可配置,支持 ...
- c#写word文档基础操作(自己控制样式)
下面一个函数,建立一个Word 文档,添加页眉.页脚,在内容中两个不同字体的Hello!!! 来自 <http://bbs.csdn.net/topics/340041961> pub ...