Java网络编程
文章平均质量分 92
jakiechaipush
小白进化中
展开
-
java的IP组播
前面介绍的Socket都是单播Socket,它们提供点对点的通信。单播Socket在两个明确的端点之间创建一个连接,有一个发送方和一个接收方。尽管点对点的通信有很多用途,但不是非常重要,很多任务则需要另外的一种不同的通信模型——组播。组播是通过TCP或UDP的附加协议实现的。Internet组播建立在UDP端口之上,Java中的组播使用UDP中介绍的DatagramPacket,以及一个新的MulticastSocket类创建组播组: 首先,需要创建一个组播组,它由一个组播地址表示。原创 2023-06-04 13:41:38 · 1254 阅读 · 0 评论 -
java的UDP(二)
与TCP相比,对于UDP,足够大的接收缓冲区甚至更加重要,因为在缓冲区满时到达的的UDP数据报就会丢失,而缓冲区满时到达的TCP数据报最后还会重传。send方法返回写入的字节数,这可能是要写的缓冲区中的可用的字节数,也可能是0,而不会是其他值,如果通道出于非阻塞模式,而且数据不能立即发送,就会返回0,否则,如果通道不在非阻塞模式,send会等待返回,知道他能发送缓冲区中的全部数据。如果通道是阻塞的,该方法在读取到包之前不会返回,如果通道是非阻塞的,没有包可以读取的情况下这个方法会立即返回null。原创 2023-06-04 11:05:34 · 1335 阅读 · 0 评论 -
java的UDP(一)
Java中的UDP实现分为两个类:DatagramPacket和DatagramSocket。DatagramPacket类将数据字节填充到UDP包汇总,这称为数据报,由你来解包接收的数据报。DatagramSocket可以收发UDP数据报。为发送数据,要将数据放到DatagramPacket中,使用DatagramPacket来发送这个包。要接受数据,可以从DatagramSocket中接受一个DatagramSocket对象,然后检查这个包的内容。原创 2023-06-02 17:26:02 · 3092 阅读 · 0 评论 -
Java NIO-非阻塞I/O(二)
阻塞模式是默认模式。使用非阻塞通道时,connect()方法会立即返回,甚至在建立连接之前就会返回,然后在等待操作系统建立连接时,我们可以做其他事。将一个通道注册到一个选择器时,register()方法会返回SelectionKey对象,不过通常你不需要保存这个引用,selectedKeys()方法可以在Set中再次返回相同的对象,一个通道可以注册多个选择器。Channels时一个简单的工具类,可以将传统的基于I/O流、阅读器和书写器包装在通道中,也可以从通道转换为基于I/O的流、阅读器和书写器。原创 2023-06-02 14:49:03 · 1070 阅读 · 0 评论 -
Java NIO-非阻塞I/O(一)
NIO介绍,以及缓冲介绍原创 2023-06-01 15:40:41 · 780 阅读 · 0 评论 -
Socket安全(二)
但这种不对称的行为可能会导致客户端与服务器之间的通信不安全,可能面临中间人攻击、数据泄露以及安全漏洞的利用风险。使用上述命令,keytool 会生成一个新的密钥对,并将其存储在名为 “jnp4e.keys” 的密钥库文件中。默认情况下是允许建立会话的,如果服务器禁止使用会话,需要会话的客户端仍然能够连接。服务端的安全Socket(即由SSLServerSocket的accept()方法返回的Socket),可以使用。前面介绍的安全的客户端Socket,这里介绍SSL的服务器Socket,它们是。原创 2023-05-30 18:11:53 · 1921 阅读 · 0 评论 -
Socket安全(一)
在传统的密钥(或称为对称密钥)加密中,加密和解密数据都使用相同的密钥。SSL常用于web服务器,因为web连接一般是暂时的,每个页面需要单独的Socket,如果每个页面搜要花一定时间来协商一个安全连接,会需要大量的握手时间 ,会产生很大的开销。前面介绍了Socket的基本使用,这里开始介绍Socket的安全问题,作为一个Internet用户,你确实有一些保护手段可以保护自己的隐私不被泄露,为了使Internet连接从根本上上更加安全,可以对Socket进行加密,这可以保持事务的机密性、真实性和准确性。原创 2023-05-30 16:31:57 · 3915 阅读 · 0 评论 -
Socket(七)
自己实现HTTP服务器原创 2023-05-30 13:49:20 · 646 阅读 · 0 评论 -
Socket(六)
这些构造函数可以指定端口了、保存入站连接请求所用的队列的长度,以及要绑定的本地网络接口。它们所做的工作几乎是一样的,只是有些方法会使用队列长度和绑定地址的默认值。默认地,如果不指定绑定的地址,且一个主机有多个网络接口和IP地址,服务器Socket会在所有接口和IP地址的指定端口上监听。它确定了是否允许一个新的Socket绑定到之前使用过的一个端口,而此时可能还有一些发送到原Socket的数据正在网络上传输。例如,体育运动的直播视频要相对较高的的带宽,另一方面,电影可能仍需要高带宽,但可以接受较大的延迟。原创 2023-05-30 10:10:24 · 589 阅读 · 0 评论 -
Socket(五)
日志工具是线程安全的,所以将它们存储在共享静态字段中没有任何问题,实际上,往往需要这么做,因为即使不用在线程之间共享Logger对象,日志文件或数据块也需要共享。可以对各个日志使用任何方便的格式。实际上,服务器一般会为这两项内容维护两个不同的日志,审计日志中,对应与服务器建立的每一个连接会分别包含一个记录,每个连接完成多个操作的服务器可能对每个操作都有一个记录。上面的日志信息是直接在控制台打印的,如果我们希望将日志文件放到更加持久的位置,虽然我们可以在代码中指定,但是更好的是在配置文件中指定。原创 2023-05-29 23:25:19 · 1032 阅读 · 0 评论 -
Socket(四)
博客Socket(一)~Socket(二)从客户端的角度讨论了Socket,客户端就是向监听连接的服务器打开一个Socket程序。不过只有客户端Socket还不够,如果不能和服务器通信,客户端没有什么用处,所以服务器也要创建Socket,编写服务器时,无法预先了解哪个主机会联系你,即使确实知道,你也不清楚哪个主机希望和你连接。换句话说,服务器就像坐在电话旁等电话一样,不知道谁会打来电话,或者什么时间打电话,所以只用Socket类是不能做到这一点的。原创 2023-05-29 22:32:08 · 436 阅读 · 0 评论 -
Socket(三)
例如,为了得到较好的性能,视频需要相对较高的带宽和较短的延迟,而电子邮件可以通过低带宽的连接传递,甚至延迟几个小时都不会造成很大的伤害。设置该选项可一确保包会尽可能地发送,无论包的大小。如果必要,当前缓存的所有数据将首先刷新输出,接受端会将紧急数据以适当的顺序放在正常接收的数据队列中,告诉应用程序紧急数据已经可用,让应用程序在队列中查找紧急数据。一旦打开OOBInline,到达的任何仅仅数据会以正常的方法放入Socket的输入流中等待读取,Java不区分紧急数据和非紧急数据,这使得它不能理想的发挥作用。原创 2023-05-29 17:44:13 · 1540 阅读 · 0 评论 -
Socket(二)
类的主要用途是为暂时的socket连接信息提供一个方便的存储,即使最初的socket已断开连接并被垃圾回收,这些信息也可以重用来创建新的Socket。SOCKS是java理解的唯一一种底层代理类型,除此之外,还有一个高层Proxy.Type.HTTP类型(作用于应用层而不是传输层),以及一个表示无代理类型的Proxy.Type.DIRECT。类表示一个连接端点,这个一个空的抽象类,除了一个默认构造函数外,没有其他方法。最后一个构造函数创建一个未连接的Socket,它通过一个指定的代理服务器连接。原创 2023-05-29 16:01:27 · 883 阅读 · 0 评论 -
Socket(一)
Socket允许程序员将网路连接看作是另外一个可以读/写字节的流,Socket对程序员掩盖了网络的底层细节,如错误检测、包大小、包分解、包重传、网络地址等。连接远程主机发送数据接受数据关闭端口绑定端口监听入站信息在绑定端口上接受来自远程机器的连接Java的socket类(客户端和服务器都可以使用)提供了四个对应前面操作的方法。后面三个操作仅仅服务器需要,即等待客户端连接。这些操作有ServerSocket实现。Java程序通常采用以下方式使用客户端Socket。原创 2023-05-29 10:37:50 · 725 阅读 · 0 评论 -
URLConnection(五)
不过,要写入首部,需要知道主体的长度,而在写首部的时候可能还不知道主体的长度,正常情况下,对于这个两难的问题,Java的解决办法是:对于HttpURLConnection获取的OutputStream,将写入此OutputStream的所有内容缓存,直到流关闭。这种模式对于响应典型的web表达的短请求载合适不过,不过对于非常长的表达或一些SOAP消息(SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换),消息负担会很大。如果这样做,Java会立即通过网络将数据以流方式发送。原创 2023-05-27 09:09:38 · 1389 阅读 · 0 评论 -
URLConnection(四)
上面方法的核心是POST方法,它首先打开一个连接,指向存储在url字段中的URL。总结来说,url.openConnection() 返回一个具体的 URLConnection 对象,可以对连接进行更多的控制和操作,而 url.connect() 是 openConnection() 方法的简化调用,用于简单的连接场景,无需额外的配置和操作。其实并没有一个固定的首部,服务器一般会忽略无法识别的首部,HTTP确实对首部字段的名和值的内容有一定的限制,例如,名不能包含空格,值不能包含换行符号等待,不然。原创 2023-05-26 23:33:45 · 1374 阅读 · 0 评论 -
URLConnection(三)
如果doOutput为true,那么除了通过这个URLConnection读取数据外,还可以将数据写入到服务器,如果useCaches为false,连接会绕过所有本地缓存,重新从服务器下载文件,由于这些字段都是保护字段,所以他们的值都需要通过相应的设置方法和获取方法来访问和修改(Get和set方法)。如果连接已经打开,boolean字段connected为true,如果连接关闭,这个字段则为false,由于在创建一个新的URLConnection对象时连接尚未打开,所以其初始值为false。原创 2023-05-26 15:09:02 · 1334 阅读 · 0 评论 -
URLConnection(二)
总之,Java的协议处理器是一种用于处理特定协议的组件,它允许Java应用程序通过各种网络协议与远程资源进行通信,并提供了一组标准的方法和接口来处理常见的协议操作。一旦安装了缓存,只要系统尝试加载一个新的URL,它首先会从这个缓存中查找,如果缓存返回了所要的内容,URLConnection就不需要与远程服务器连接了。子类中的getOutputStream()方法应当返回一个OutputStream,指向缓存中的“数据库”,这个数据库与同时传入put()方法的URI对应。原创 2023-05-26 08:33:57 · 1293 阅读 · 0 评论 -
URLConnection(一)
URLConnection是一个抽象类,表示指向URL指定资源的活动连接。URLConnection有两个不同但相关的用途。首先,与URL类相比,它对服务器(特别是HTTP服务器)的交互提供了更多控制。URLConnection可以检查服务器发送的首部,并相应地做出响应。它可以设置客户端请求中使用的首部字段,最后URLConnection可以用POST、PUT和其他HTTP请求方法向服务器发回数据。原创 2023-05-25 21:21:31 · 2376 阅读 · 0 评论 -
Java的CookieManager
Java5包括一个抽象类Java.net.CookieHandler,它定义了存储和获取Cookie的一个API,但不包括这个抽象类的实现,所以还有很多工作要做。Java6进一步作了补充,为CookieManager增加了一个可以使用的具体子类java.net.CookieManager。不过默认情况下Cookie并不打开。在Java存储和返回Cookie之前,需要先启动cookie。原创 2023-05-25 19:20:38 · 2089 阅读 · 0 评论 -
java代理相关知识
许多系统通过代理服务器访问Web,有时还会访问Internet的其他非HTTP部分。代理服务器接受从本地客户端服务器的请求。代理服务器向远程服务器发出请求,再将结果转发回本地客户端。有时这样做是为了安全,如防止远程主机了解关于本地网络配置的秘密细节。另外一些情况,这样做是为了通过过滤出站请求,限制可以浏览的网站。而还有一些情况则纯粹是出于性能的考虑,这样允许多个用户从本地缓存中获取同样的一些经常访问的文档,二不是重复从远程主机下载。基于URL类的java程序可以使用大多数常见的代理服务器和协议。原创 2023-05-25 10:20:05 · 1280 阅读 · 0 评论 -
URLEncoder类和URLDecoder类
URL类不会自动编码或解码,可以使用无效的ASCII字符和非ASCII字符及百分号来构造URL对象。由getPath()方法和toExternalForm等方法输出时,这样的字符和转义字符不会自动编码和解码。幸运的是Java提供了URLEncoder和URLDecoder类,可以对这种格式的URL进行编码和解码。原创 2023-05-25 09:31:06 · 825 阅读 · 0 评论 -
Java的URI类
URI是对URL的抽象,不仅包含统一资源定位符,还包括统一资源名(URN)。URI类完全有关于资源的标识和URI的解析。它没有提供方法来获取URI所标识资源的表示相比于URL,URI类与相关的规范更一致URI对象可以表示相对URI,URL类在存储URI时会将其绝对化。简而言之,URL对象是对应网络获取的应用层协议的一个表示,而URI对象纯粹用来解析和处理字符串。URI类没有网络获取功能,尽管URL类有一些字符串解析方法,如getFIle等,但其中很多方法都有问题,与相关的规范要求的行为不完全一样。原创 2023-05-25 09:01:47 · 3029 阅读 · 4 评论 -
java的URL类
URL原创 2023-05-24 16:08:15 · 4348 阅读 · 0 评论 -
NetworkInterface类
NetworkInterface类表示一个本地IP地址。这可以是一个物理接口,如额外的以太网卡(常见于防火墙和路由器),也可以是一个虚拟接口,与机器的其它IP地址绑定到同个物理硬件。NetworkInterface类提供了一些方法可以枚举所有本地地址(而不考虑接口),并由它们创建InetAddress对象,然后这些InetAddress对象(这篇博客)可用于创建Socket、服务器Socket等。原创 2023-05-23 21:05:36 · 1105 阅读 · 0 评论 -
InetAddress类
InetAddress对象原创 2023-05-23 17:44:47 · 2290 阅读 · 1 评论