网络编程:
网络模型
OSI参考模型:
应用层:将数据封装一下 应用层
表示层: 表示层
会话层: 会话层:
传输层: 传输层
网络层:付给封装的数据IP地址 网络层
数据链路层: 数据链路层
物理层:网线、蓝牙。。是物理层设备 ———— 物理层
OSI参考模型:
应用层:将数据封装一下 应用层
表示层: 表示层
会话层: 会话层:
传输层: 传输层
网络层:付给封装的数据IP地址 网络层
数据链路层: 数据链路层
物理层:网线、蓝牙。。是物理层设备 ———— 物理层
整个下来就叫数据封包 拆包
TCP/IP参考模型:
应用层----HTTP/FTP协议
传输层---TCP/IP
网际层----IP
主机至网络层
TCP/IP参考模型:
应用层----HTTP/FTP协议
传输层---TCP/IP
网际层----IP
主机至网络层
网络通信要素:ip地址、端口号 、传输协议
java.net包
1、IP地址:用于描述IP对象的类、InetAddress
InetAddress i=InetAddress.getLocalHost();//获得本机IP对象
i.getHostAddress();//获取本机地址
如何获取任意主机地址??
InetAddress ir=InetAddress.getByName("192.168.1.234")//传入你要解析的IP地址可以传入主机名 但要解析很慢主张IP地址
例如百度肯定不是一台主机
java.net包
1、IP地址:用于描述IP对象的类、InetAddress
InetAddress i=InetAddress.getLocalHost();//获得本机IP对象
i.getHostAddress();//获取本机地址
如何获取任意主机地址??
InetAddress ir=InetAddress.getByName("192.168.1.234")//传入你要解析的IP地址可以传入主机名 但要解析很慢主张IP地址
例如百度肯定不是一台主机
127.0.0.1 没有配置任何IP地址默认本机回环地址
2、端口
数据要求发送到对方指定的应用程序上。为了标识这些应用程序所以这些网络应用程序都用数字标识,
为了方便称呼这个数字叫做端口 :逻辑端口0-65535 (0-1024最好不要用)
3、定义通信规则。就是协议
国际组织定义了通用协议:TCP/IP
数据要求发送到对方指定的应用程序上。为了标识这些应用程序所以这些网络应用程序都用数字标识,
为了方便称呼这个数字叫做端口 :逻辑端口0-65535 (0-1024最好不要用)
3、定义通信规则。就是协议
国际组织定义了通用协议:TCP/IP
UDP QQ,寄包裹、网络视频会议
将数据及源和目的封装称数据包中,不需要建立连接
每个数据包的大小限制在64K内
因无连接,是不可靠协议
不需要建立连接,速度快、
将数据及源和目的封装称数据包中,不需要建立连接
每个数据包的大小限制在64K内
因无连接,是不可靠协议
不需要建立连接,速度快、
TCP
建立连接,形成传输数据的通道
在链接中进行大数据量传输、
通过三次握手完成连接,是可靠协议
必须建立连接,效率会降低
建立连接,形成传输数据的通道
在链接中进行大数据量传输、
通过三次握手完成连接,是可靠协议
必须建立连接,效率会降低
网络编程即Socket 为网络编程提供的一种机制
需求:定义一个udp传输方式,用于发送数据
思路:
1、定义一个socket服务 DatagramSocket
2、将数据封装到数据包中 DatagramPacket
3、通过DatagramSocket里发送方法send()发送数据
4、关闭资源
思路:
1、定义一个socket服务 DatagramSocket
2、将数据封装到数据包中 DatagramPacket
3、通过DatagramSocket里发送方法send()发送数据
4、关闭资源
需求:定义一个udp传输方式用于接收数据
思路:
1、定义udpsocket服务。通常会监听一个端口,其实就是给这个接收网络应用程序定义数字标识、、
方便于明确哪些数据过来该应用程序可以处理
2、先定义一个字节数组然后定义一个数据包用于存储接受的数据DatagramPacket
因为数据包有更多的功能来取出不同数据
3、通过socket服务的receive方法来存储在已定义好的数据包中
4、通过数据包对象的特有功能将这些数据取出打印在控制台上
5、关闭资源
UDP键盘录入方式数据:
DatagramSocket ds = new DatagramSocket();
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while ((line = bfr.readLine()) != null) {
if (line.equals("886")) {
break;
}
byte[] buf = line.getBytes();//把键盘录入数据
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getByName("127.0.0.1"), 10005);
ds.send(dp);
DatagramSocket ds = new DatagramSocket();
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while ((line = bfr.readLine()) != null) {
if (line.equals("886")) {
break;
}
byte[] buf = line.getBytes();//把键盘录入数据
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getByName("127.0.0.1"), 10005);
ds.send(dp);
}
ds.close();
ds.close();
TCP传输:
1、tcp分客户端 和服务端
2、客户端对应的对象是Socket 服务端对应的对象是ServerSocket
客户端
1、创建客户端服务对象Socket()
并指定连接的主机和端口
Socket s=new Socket("服务器端的ip地址",端口号);
2、为了发送数据应获取socket流中的输出流
OutputStream out=s.getOutputStream();
out.write("tcp wo lai le".getBytes());
s.close();
并指定连接的主机和端口
Socket s=new Socket("服务器端的ip地址",端口号);
2、为了发送数据应获取socket流中的输出流
OutputStream out=s.getOutputStream();
out.write("tcp wo lai le".getBytes());
s.close();
服务端:
1、建立服务端的socket服务 ServeSocket 并监听一个端口
ServerSocket ss=new ServerSocket(10006);
2、获取连接过来的客户端对象
通过ServerSocket的accept方法。没有连接就会等,所以这个方法是阻塞式的
Socket s=ss.accept();
3、客户端如果发来数据,那么服务端要使用对应的客户端对象,并取到该客户端对象的读取流来读取数据
并打印在控制台
InputStream in=s.getInputStream();
byte[] buf=new byte[1024];
int len=0;
len=in.read(buf);
String s=new String(buf,0,len);
system.out.println(s)
//获取客户端发来的ip地址
String ip=s.getInetAddress().getHostAddress();
并打印在控制台
InputStream in=s.getInputStream();
byte[] buf=new byte[1024];
int len=0;
len=in.read(buf);
String s=new String(buf,0,len);
system.out.println(s)
//获取客户端发来的ip地址
String ip=s.getInetAddress().getHostAddress();
4、关闭服务器(可选)关闭客户端必选
s.close();
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
文本转换服务器
将客户端发到服务端的信息服务端转换成大写发回来
文本转换服务器
将客户端发到服务端的信息服务端转换成大写发回来
客户端:
1、建立服务 Socket s=new Socket("127.0.0.1",10008);
try{
2、键盘录入:源 BufferedReader bfr=new BufferedReader(new InputStreamReader(system.in));
目的;网络输出流 PrintWriter pw=new PrintWriter(s.getOutputStream());
//定义一个网络输入流接收来自服务端返回的信息 BufferedReader bfrIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
3、String line=null;
while((line=bfr.readLine())!=null){
if(line.equals("over"))
break;
pw.println(line);//发送到客户端
String str=bfrIn.readLine();//接收来自服务端的信息
system.out.println(“server”+str);//并打印在控制台
1、建立服务 Socket s=new Socket("127.0.0.1",10008);
try{
2、键盘录入:源 BufferedReader bfr=new BufferedReader(new InputStreamReader(system.in));
目的;网络输出流 PrintWriter pw=new PrintWriter(s.getOutputStream());
//定义一个网络输入流接收来自服务端返回的信息 BufferedReader bfrIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
3、String line=null;
while((line=bfr.readLine())!=null){
if(line.equals("over"))
break;
pw.println(line);//发送到客户端
String str=bfrIn.readLine();//接收来自服务端的信息
system.out.println(“server”+str);//并打印在控制台
}
s.close();
bfr.close();
}catch(){
bfr.close();
}catch(){
}
服务端:
1、建立服务 ServerSocket ss=new ServerSocket(10008);
2、获取socket对象 输入流 Socket s=ss.accept();
1、建立服务 ServerSocket ss=new ServerSocket(10008);
2、获取socket对象 输入流 Socket s=ss.accept();
源:socket输入流:BufferedReader bfrIn=new BufferedReader(new InputStreamReader(s.getInputStream()))
目的 :socket输出流:printWriter pw=new PrintWriter(s.getOutputStream());
String line=null;
while((line=bfrIn.readerLine)!=null){
pw.println(line.ToUpperCase());
目的 :socket输出流:printWriter pw=new PrintWriter(s.getOutputStream());
String line=null;
while((line=bfrIn.readerLine)!=null){
pw.println(line.ToUpperCase());
}
bfrIn.close();
s.close();
bfrIn.close();
s.close();
TCP复制文件
要注意的是结束标记:用socket里的一个方法shutdownOutput();关闭网络输出流,也是文件的一个结束标记-1
需求:上传图片
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
用于描述URL的对象 URL:同一资源定位符
URL url=new URL("http://127.0.0.1:8080/mydemo/html?name=haha&age=20");
url.getPtotocol();//获取协议
url.getHost();//获取主机
url.getPort();//获取端口号
url.getPath();//获取路径
url.getFile();//获取文件名
url.getQuery();//获取传入的参数
URL url=new URL("http://127.0.0.1:8080/mydemo/html?name=haha&age=20");
url.getPtotocol();//获取协议
url.getHost();//获取主机
url.getPort();//获取端口号
url.getPath();//获取路径
url.getFile();//获取文件名
url.getQuery();//获取传入的参数
URLConnection 拆包:应用层 不用再定义Socket
URLConnection conn=url.openConnection();
URLConnection conn=url.openConnection();
Socket 有一个无参数的构造函数怎么样传ip地址和端口号呢。
socket里有一个connect()方法里面传入的参数是InetSocketAddress
socket里有一个connect()方法里面传入的参数是InetSocketAddress
域名解析:(将主机名翻译成ip地址)
DNS服务器,域名解析
某一个网站不想开启可以找
C:\Windows\System32\drivers\etc\hosts文件
127.0.0.1 网站的地址 此时网站走的是本地主机,不走网络DNS
、、
C:\Windows\System32\drivers\etc\hosts文件
127.0.0.1 网站的地址 此时网站走的是本地主机,不走网络DNS
、、