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

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

分层思想比喻:就好比你去邮局寄信,你把信给邮局就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. 读取properties和xml中配置文件的值

    五种方式让你在java中读取properties文件内容不再是难题 在java中读取properties和xml文件中的方法:https://www.cnblogs.com/ConfidentLiu/ ...

  2. ORACLE数据库的备份和还原。

    Oracle数据库备份与还原命令 数据导出: 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中 exp system/manager@TEST ...

  3. Linux上的errno和strerror

    部分内容参考:https://www.douban.com/note/165931644/ 在Linux的api中: errno 是记录系统的最后一次错误代码.代码是一个int型的值,在errno.h ...

  4. easyui datagrid关于分页的问题

    easyui框架中datagrid可以很好的来展示大量的列表数组,但是由于datagrid一般都是从控件本身传递一个页码给后台,后台进行处理. 但是,最近项目跟webgis有关,数据查询直接是从服务中 ...

  5. springboot集成freemarker 配置application.properties详解

    #配置freemarker详解 #spring.freemarker.allow-request-override=false # Set whether HttpServletRequest att ...

  6. python全栈测试题(一)

    1.执行Python脚本的两种方式 如果想要永久保存代码,就要用文件的方式 如果想要调试代码,就要用交互式的方式即终端命令下和python环境中 2.Pyhton单行注释和多行注释分别用什么? pyt ...

  7. Servlet的生命周期以及线程安全问题

    一:Servlet生命周期图,以及注意事项 二:代码演示 LifeCycleServlet.java package cn.woo.servlet; import java.io.IOExceptio ...

  8. 1269 匈牙利游戏 2012年CCC加拿大高中生信息学奥赛

    1269 匈牙利游戏 2012年CCC加拿大高中生信息学奥赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond         题目描述 Description ...

  9. Node.js连接MongoDB

    使用monk访问mongodb mongodb.monk都安装了依赖的前提下: 首先启动MongoDB 服务:mongod: 进入了mongodb后台管理,再通过终端创建数据库:use monk-ap ...

  10. iOS - 协议实现的例子

    在实际开发中,协议的应用非常广泛,以下是实际应用的例子. 1.协议的定义: myProtocolDelegate.h // // myProtocolDelegate.h // zlwPlayerAp ...