Java基础---Java---网络编程---TCP、UDP、UDP-键盘录入方式数据、Socket、TCP复制文件、UDP-聊天
网络编程
网络模型
*OSI参考模型
*Tcp/IP参考模型
网络通读要素
*IP地址
*端口号
*传输协议
1.找到对方Ip
2.数据要发送到对方指定的的应用程序上,为了标识这些应用程序,所经给这些网络应用程序都用数字进行标识。
为了方便称呼这个数字,叫做端口,逻辑端口。0-65535任选。0-1024端口被系统所用。mysql:3306
web:80 tomcat:8080 ftp:21 远程:3389 端口只能有一个,不能相互冲突
3.定义通信规则,这个通讯规则。
检测网卡是否出问题,可以通过ping 127.0.0.1进行,看是否能Ping通。
网线就是标准的物理层设备
OSI参考模型
应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。
数据封包,然后就是数据拆包
Tcp/IP参考模型(从上往下)
应用层,传输层(tcp/ip),网际层(ip),主机至网络层
javaweb网络开发,我们是在应用层做
IP地址:网络中设备的标识
不易记忆,可用主机名。
本地回环地址:127.0.0.1 主机名:localhost
端口号:
用于标识进程的逻辑地址,不同进程的标识。
有效端口:0-65535,其中0-1024,系统使用或保留端口。
传输协议:通讯的规则。
常见的协议:TCP,UDP
TCP和UDP的特点:
TCP:建立连接,形成传输数据的通道
在连接中进行大数据传输。
通过三次握手完成连接,是可靠协议。
必须建立连接,效率会稍低。
如果连接中断,它会记住上次连接到那里
UDP:
将数据用源目的封装成数据包中,不需要建立连接。
在发据前,不需要建立连接。就是给邮局寄东西。
如果没找到,包就会丢掉。发的包是有限制的。
每个数据报的大小限制在64K内。
因载连接,是不可靠协议。
不需要建立连接。速度快。
如果对方真在的话,就马上收到了。
相当于固话机,在某一频段上。开着就能收到。
服务端:
import java.net.DatagramPacket; import java.net.DatagramSocket; /** * 需求:定义一个应用程序,用于接收udp协议 * 传输的数据服务并处理。 * 思路:1.定义一udpsocket服务,通常会指定一个监听端口, * 其实就是给这个接收网络应用程序定久数字标识,方便 * 于明确哪些应用程序发消息过来。 * 2.定义一个数据包,因为要存储接收到的字节 * 数据,因为数据包对象中有更多功能可以提取 * 字节数据中的不同的数据信息。 * 3.通过socket服务的receive方法将收到的数据 * 存入已定义好的数据包中。 * 4.通过数据包对象的特有功能,将这些不同的数 * 据取出,打印在控制台上。 * 5.关闭资源。 * @author hjl * */ public class UDPReceive { //接收端的内容都来自10000端口。 public static void main(String [] args)throws Exception{ //1.创建udp socket,建立端点。 DatagramSocket ds=new DatagramSocket(10000); while(true){ //2.定义数据包,用于存储,分析这个缓冲区, byte[] buf=new byte[1024]; DatagramPacket dp=new DatagramPacket(buf, buf.length); //3.通过服务的receive方法将收到数据存入数据包中。 ds.receive(dp);//这是一个阻塞式方法 //4.通过数据包中的方法获取其中的对象。 String ip =dp.getAddress().getHostAddress(); String data=new String(dp.getData(),0,dp.getLength()); int port=dp.getPort(); System.out.println(ip+"::"+data+"::"+port); //这个port是系统随机给发送端应用程序的一个标识 //数据是从port出来的。发送至接收端的10000端口 } //关闭资源 //ds.close(); } }
客户端:
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * 需求:通过udp传输方式,将一段文字数据发送出去 * 思路:1.建立udpSocket服务。 * 2.提供数据,并将数据封装到数据包中。 * 3.通过Socket服务的发送功能,将数据包发出去。 * 4.关闭数据。 * @author hjl * */ public class UDPSend { public static void main(String [] args)throws Exception { //1.创建udp服务,通过DatagramSocket对象。 DatagramSocket ds=new DatagramSocket(8888);//我们也可以在这里指定端口 //2.确定数据,并封装成数据包,DatagramSocket(byte[] buf,int length,InetAddress address,int port) byte[] buf="zhe shi udp shuju".getBytes(); DatagramPacket dp=new DatagramPacket(buf, buf.length,InetAddress.getByName("172.16.196.12"),10000); //3.通过Socket服务,将已有的数据包发送出去。通过send方法 ds.send(dp); ds.close(); } }
网络编程之键盘录入UDP
服务端:
import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPReceive2 { public static void main(String [] args) throws Exception{ DatagramSocket ds=new DatagramSocket(10001); while(true){ byte[] buf=new byte[1024]; DatagramPacket dp=new DatagramPacket(buf, buf.length); ds.receive(dp);//阻塞式方法 String ip=dp.getAddress().getHostAddress(); String data=new String (dp.getData(),0,dp.getLength()); System.out.println(ip+"::"+data); } } }
客户端:
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPSend2 { public static void main(String [] args)throws Exception{ DatagramSocket ds=new DatagramSocket(); BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in)); String line=null; while((line=bufr.readLine())!=null){//readline也是阻塞式方法 if("886".equals(line)) break; byte[] buf=line.getBytes(); DatagramPacket dp=new DatagramPacket(buf, buf.length,InetAddress.getByName("172.16.196.12"),10001); ds.close(); } } }
Socket编程:
Socket就是网络服务提供的一种机制。
通信的两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO传输。
每个应用程序都类似有一个sockect,然后进行互联。
先有港口,然后才有船只进行装货,卸货。
为网络服务提供一种机制。
UDP传输
DatagramSocket与DatagramPacket
建立发送端,接收端,
建立数据包。
调用Socket的发送接收方法。
关闭Socket。
发送端与接收端是两个独立的运行程序。
DatagramPacket:
数据报包用来实现无连接包投递服务。每条报文仅根据该包中包含的信息从一台机器路由到另一台机器。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。不对包投递做出保证。
端口绑定异常,一般都是服务端口被应用多次。常出现在一些循环中。
TCP传输:
Socket和ServerSocket
建立客户端和服务端
建立连接后,通过socket中的IO流进行数据的传输。
关闭socket,同样,客户端与服务端是两个独立的应用程序。
客户端发送数据给服务端,这里指的是发送文本,然后服务端把文本存起来。
这个例子的重点是标识怎么定义的问题。如果要利用上传图片的话,就不能用字符流,而要用字节流。
客户端:
import java.io.*; import java.net.*; class TextClient { public static void main(String [] args) throws IOException{ Socket s= new Socket("192.168.1.254",10006); BufferedReader bufr=new BufferedReader(new FileReader("client.java");//这个文件一定要判断,是否存在。 PrintWriter out=new PrintWriter(s.getOutPutStream(),true); //判断标识 DataOutputStream dos=new DataOutputStream(s.getoutputStream()); longtime=System.currentTimeMills(); dos.writeLong(time); String line=null; While((line=bufr.readLine())!=null){ out.println(line); } s.shutdownOutput();//关闭客户端的输出流。相当于给注中加入一个结束标识。 dos.writeLong(time); //out.println("over"); BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream())); String str=bufIn.readLine(); System.out.println(str); bufr.close(); s.close(); } }
服务端:
class TextServer{ public static void main(String [] args){ ServerSocket ss=new ServerSocket(10006); Socket s=ss.accept(); String ip=s.getInetAddress().getHostAddress(); System.out.println(ip+"....is connected"); //判断标识 DataInputStream dis=new DataInputStream(s.getInputStream()); long l=dis.readLong();//把时间戳读完 BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream())); PrintWriter out=new PrintWriter(new FileWriter("server.txt"),true); String line=null; while((line=bufIn.readLine())!=null){ //if("over".equals(line)) //break; out.println(line); } PrintWriter pw=new PrintWriter(s.getOutputStream().true); pw.println("上传成功"); out.close(); s.close(); ss.close(); } }
Java基础---Java---网络编程---TCP、UDP、UDP-键盘录入方式数据、Socket、TCP复制文件、UDP-聊天的更多相关文章
- 黑马程序员:Java基础总结----网络编程
黑马程序员:Java基础总结 网络编程 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络编程 网络通讯要素 . IP地址 . 网络中设备的标识 . 不易记忆,可用 ...
- java基础篇---网络编程(TCP程序设计)
TCP程序设计 在Java中使用Socket(即套接字)完成TCP程序的开发,使用此类可以方便的建立可靠地,双向的,持续的,点对点的通讯连接. 在Socket的程序开发中,服务器端使用serverSo ...
- java基础知识——网络编程、IO流
IO流 字节流:处理字节数据的流对象,计算机中最小数据单元就是字节.InputStream OutputStream 字符流:字符编码问题,将字节流和编码表封装成对象就是字符流.Reader Writ ...
- 黑马程序员——JAVA基础之网络编程
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 网络编程 网络模型:OSI参考模型和TCP/IP参考模型 网络通讯三要素: IP地址:InetA ...
- java基础篇---网络编程(IP与URL)
一:IP与InetAddress 在Java中支持网络通讯程序的开发,主要提供了两种通讯协议:TCP协议,UDP协议 可靠地连接传输,使用三方握手的方式完成通讯 不可靠的连接传输,传输的时候接受方不一 ...
- 【Java基础】网络编程
网络编程 网络编程概述 网络编程的目的:直接或简洁地通过网络协议与其他计算机实现数据交换,进行通讯. 网络编程的两个主要问题: 如果准确地定位网络上一台或多台主机,并定位主机上的特定应用: 找到主机后 ...
- 黑马程序员——【Java基础】——网络编程
---------- android培训.java培训.期待与您交流! ---------- 一.网络模型概述 网络模型示意图: 说明: (1)数据的传输:在用户端,应用层的数据,经过层层封包,最后到 ...
- Java基础之网络编程
网络编程:1.网络编程概述 (1)网络模型 OSI参考模型 TCP/IP参考模型 (2)网络通讯要素 IP地址 端口号 传输协议 (3)网络通讯前提: **找到对方IP **数据要发送到指定端口.为了 ...
- java基础篇---网络编程(UDP程序设计)
UDP程序设计 在TCP的索引操作都必须建立可靠地连接,这样一来肯定会浪费大量的系统性能,为了减少这种开销,在网络中又提供了另外一种传输协议---UDP,不可靠的连接,这种协议在各个聊天工具中被广泛的 ...
- java基础:网络编程TCP,URL
获取域名的两种方法: package com.lanqiao.java.test; import java.net.InetAddress;import java.net.UnknownHostExc ...
随机推荐
- 使用JdbcTemplate过程中使用到多个参数和like模糊
项目中经常会用到模糊查询,最近使用JdbcTemplate过程中就遇到了. 一开始尝试了拼接的方式去 String sql = "select count(1) from web_users ...
- 初探nginx
nginx nginx是俄罗斯人写的轻量级http服务器,Nginx 以事件驱动的方式编写,有非常好的性能,同时也是一个非常高效的反向代理.负载均衡. Nginx 稳定性高,模块库丰富,配置灵活,系统 ...
- postgresql 安装使用
www.postgresql.org去下载你需要的版本,我下载的9.6.8 安装过程中会让你输入一次密码,其余的默认就ok 默认超级用户名postgres 打开 pgadmin4,我们将语言改为中文会 ...
- [Java] 设计模式:代码形状 - lambda表达式的一个应用
[Java] 设计模式:代码形状 - lambda表达式的一个应用 Code Shape 模式 这里介绍一个模式:Code Shape.没听过,不要紧,我刚刚才起的名字. 作用 在应用程序的开发中,我 ...
- jquery form提交
$('#form').form("submit", { url: "Stu_sendsms.aspx", onSubmit: function () { $(' ...
- PLSQL(1)
PLSQLl编程 plsql是Oracle在标准的sql语言上的扩展 特点:可以在数据库中定义变量,常量,还可以使用条件语句和判断语句以及异常等 P ...
- Error:Cannot build Artifact :war exploded because it is included into a circular depency
找到项目的目录 查找artifacts文件夹 删掉不是你项目名称的那个 问题出现的原因是你该项目名字了 造成tomcat发布两个网页 发布两个网页不是什么大问题 但是这两玩意地址一样 争夺资源啊冲突之 ...
- 什么样的简历受HR青睐?
简历是我们在求职过程中的名片,那么如何写出更容易受到HR青睐的简历呢? HR可能一天要看上百份的简历,他们都希望能够尽快筛选出合适的人,然后用更多的时间去跟候选人沟通.所以招聘人员一般看一份简历只会花 ...
- Python中的赋值(复制)、浅拷贝、深拷贝之间的区别
1.赋值: 只是复制了新对象的引用,不会开辟新的内存空间. 2.浅拷贝: 创建新对象,其内容是原对象的引用. 浅拷贝有三种形式:切片操作,工厂函数,copy模块中的copy函数. 如: ...
- Http多线程版本
上一篇文章讲了HTTP是如何通过TCP协议传输到服务器上,以及服务器接收到的报文信息请参考[HTTP与TCP的关系] 这篇文章主要讲述的多线程处理Http请求,关于多线程的好处我就不再叙述了.由于我们 ...