黑马程序员--- 学习笔记(第二十三天)
来源:互联网 发布:购买域名后需要备案吗 编辑:程序博客网 时间:2024/05/16 10:40
—————————— ASP.Net+Android+IOS开发、.Net培训、期待与您交流!——————————
网络编程
1.找到对方的ip
2.数据要发送到指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序
都用数字标识,为了方便称呼这个标识,叫做端口逻辑端口 0-65535
3.定义通信规则,这个通讯规则称为协议,国际组定义了通用协议TCP/IP(广/局域网)
本机回环IP:127.0.0.1 Localhost
IP分为:IPv4 IPv6
网络模型:
OSI参考模型 TCP/IP参考模型
1.应用层 1.应用层
2.表示层 2.传输层
3.会话层 3.网际层
4.传输层 4.主机至网络层
5.网络层
6.数据链路层
7.物理层
例如输出过程:qq
数据封包一层层的封,再数据拆包一层层的拆
java.net包中提供了网络编程对象
InetAddress类
getLocalHost();//返回本类对象
有可能发生unknowHostException, 未知主机异常
toString();//返回主机名和主机地址字符串变现形式
getHostAddress();//获取主机地址
getHostName();//获取主机名称
//获取任意一台主机的对象
getByName(); //获取单个
getAllByName();//获取全部 返回数组
UDP传输协议
将数据及源和目的封装到数据包中,不需要建立连接
1.每个数据包的大小限制在64k内
2.因无连接,是不可靠协议
3.不需要建立连接,速度快
4.聊天,视频会议等可以使用UDP协议
TCP传输协议
1.建立连接,形成传输数据的通道
2.在连接中可以进行大数据量传输
3.通过三次握手完成连接,是可靠的协议
4.必须建立连接,效率会稍低
5.下载等可以使用TCP协议
Socket编程(网络编程)
Socket就是为网络服务提供的一种机制,通信两端都有Socket,网络通信其实就是
Socket间的通信,数据在两个Socket间通过IO流传输
UDP传输
DatagramSocket: 发送接收数据
DatagramPacket: 数据包
receive();//接收数据
send();//发送数据
/*
通过UDP传输方式,将一段话发送出去
发送端:
思路:
1.建立UDPSocket服务
2.提供数据并将数据封装到数据包中
3.通过Socket服务发送功能,将数据包发出去
4.关闭资源
*/
/*
通过UDP传输方式,用于接收并处理数据
接收端:
思路:
1.先建立UDPSocket服务,指定接收端口
2.定义一个数据包,因为要存储接收到的字节数据,因为数据包对象中更多的功能,
可以提取字节数组的不同数据信息
3.通过Socket服务的receive方法将接收到的数据存入到定义好的数据包中
4.通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上
5.关闭资源
*/
getPort(); //获取端口
getData(); //获取数据
getAddress(); //获取发送端的IP地址
getLength();//获取数据长度
Tcp传输
Socket 客户端
ServerSocket 服务端
客户端通过查阅Socket对象,发现在该对象建立时,就可以去连接指定主机
,因为tcp是面向连接的,所以在建立Socket服务时,就要有服务端. 连接成功后
形成通路后,在该通道进行数据的传输
步骤
1.创建Socket服务,并指定要连接的主机地址和端口
2.通过io进行数据的读取和输出
3.关闭客户端
服务端:
1.建立服务的Socket服务,ServerSocket,并监听一个端口
2.获取连接过来的Socket客户端对象,通过serverSocket对象的accept方法
3.客户端如果发送来数据,那么服务端使用对应的客户端对象,并获取到该对象
的读取流来获取发过来的数据,并打印在控制台上
4.关闭服务端(可选)
该例子出现的问题: 通过键盘录入出现的
现象:客户端和服务端两端都在等待,为什么呢?
因为客户端和服务端都有阻塞式方式,这写方法没有读到结束标记
那么就一直在等待,而导致两端都在等待
网络编程
1.找到对方的ip
2.数据要发送到指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序
都用数字标识,为了方便称呼这个标识,叫做端口逻辑端口 0-65535
3.定义通信规则,这个通讯规则称为协议,国际组定义了通用协议TCP/IP(广/局域网)
本机回环IP:127.0.0.1 Localhost
IP分为:IPv4 IPv6
网络模型:
OSI参考模型 TCP/IP参考模型
1.应用层 1.应用层
2.表示层 2.传输层
3.会话层 3.网际层
4.传输层 4.主机至网络层
5.网络层
6.数据链路层
7.物理层
例如输出过程:qq
数据封包一层层的封,再数据拆包一层层的拆
java.net包中提供了网络编程对象
InetAddress类
getLocalHost();//返回本类对象
有可能发生unknowHostException, 未知主机异常
toString();//返回主机名和主机地址字符串变现形式
getHostAddress();//获取主机地址
getHostName();//获取主机名称
//获取任意一台主机的对象
getByName(); //获取单个
getAllByName();//获取全部 返回数组
/*InetAddress 常用方法演示*/import java.net.*;class Demo {public static void main(String[] args)throws Exception {//static InetAddress getLocalHost() // 返回本地主机。 InetAddress id=InetAddress.getLocalHost(); sop(id.toString()); sop(id.getHostAddress()); //获取主机地址sop(id.getHostName()); //获取主机名称//通过指定地址获取主机InetAddress local=InetAddress.getByName("192.168.100.3");sop(local.getHostName()); //指定地址获取多个主机InetAddress [] in=InetAddress.getAllByName("www.baidu.com");sop(in.length);}public static void sop(Object o){System.out.println(o);}}
UDP传输协议
将数据及源和目的封装到数据包中,不需要建立连接
1.每个数据包的大小限制在64k内
2.因无连接,是不可靠协议
3.不需要建立连接,速度快
4.聊天,视频会议等可以使用UDP协议
TCP传输协议
1.建立连接,形成传输数据的通道
2.在连接中可以进行大数据量传输
3.通过三次握手完成连接,是可靠的协议
4.必须建立连接,效率会稍低
5.下载等可以使用TCP协议
Socket编程(网络编程)
Socket就是为网络服务提供的一种机制,通信两端都有Socket,网络通信其实就是
Socket间的通信,数据在两个Socket间通过IO流传输
UDP传输
DatagramSocket: 发送接收数据
DatagramPacket: 数据包
receive();//接收数据
send();//发送数据
/*
通过UDP传输方式,将一段话发送出去
发送端:
思路:
1.建立UDPSocket服务
2.提供数据并将数据封装到数据包中
3.通过Socket服务发送功能,将数据包发出去
4.关闭资源
*/
/*
通过UDP传输方式,用于接收并处理数据
接收端:
思路:
1.先建立UDPSocket服务,指定接收端口
2.定义一个数据包,因为要存储接收到的字节数据,因为数据包对象中更多的功能,
可以提取字节数组的不同数据信息
3.通过Socket服务的receive方法将接收到的数据存入到定义好的数据包中
4.通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上
5.关闭资源
*/
getPort(); //获取端口
getData(); //获取数据
getAddress(); //获取发送端的IP地址
getLength();//获取数据长度
/*udp 发送端*/import java.net.*;class UdpSend {public static void main(String[] args)throws Exception {DatagramSocket ds=new DatagramSocket(8888);//DatagramPacket(byte[] buf, int length, InetAddress address, int port) //构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。 String str="udp测试"; byte []buf=str.getBytes(); DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.100.3"),1314); ds.send(dp); ds.close();}}
/*接收端*/import java.net.*;class UdpRece {public static void main(String[] args)throws Exception {//DatagramSocket(int port) // 创建数据报套接字并将其绑定到本地主机上的指定端口。DatagramSocket ds=new DatagramSocket(1314);//DatagramPacket(byte[] buf, int length) // 构造 DatagramPacket,用来接收长度为 length 的数据包。byte buf[]=new byte[1024];DatagramPacket dp=new DatagramPacket(buf,buf.length);ds.receive(dp);InetAddress in=dp.getAddress();sop(new String(dp.getData(),0,dp.getLength()));sop(in.getHostAddress());sop(in.getHostName());sop(dp.getLength());sop(dp.getPort());ds.close();}public static void sop(Object o){System.out.println(o);}}
/*键盘录入 发送数据*/import java.net.*;import java.io.*;class Send {public static void main(String[] args)throws Exception {DatagramSocket ds=new DatagramSocket(8888);BufferedReader br=new BufferedReader(new InputStreamReader(System.in));String line=null;byte []buf=null;while((line=br.readLine())!=null){ if("over".equals(line)) break; buf=line.getBytes("utf-8");DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.100.3"),1314);ds.send(dp);}br.close();ds.close();}}
/*接收端不断接收客户的数据*/import java.net.*;class Rece {public static void main(String[] args)throws Exception {DatagramSocket ds=new DatagramSocket(1314);byte []buf=new byte[1024];while(true){DatagramPacket dp=new DatagramPacket(buf,buf.length);ds.receive(dp);System.out.println(new String(dp.getData(),0,dp.getLength(),"utf-8"));}}}
Tcp传输
Socket 客户端
ServerSocket 服务端
客户端通过查阅Socket对象,发现在该对象建立时,就可以去连接指定主机
,因为tcp是面向连接的,所以在建立Socket服务时,就要有服务端. 连接成功后
形成通路后,在该通道进行数据的传输
步骤
1.创建Socket服务,并指定要连接的主机地址和端口
2.通过io进行数据的读取和输出
3.关闭客户端
服务端:
1.建立服务的Socket服务,ServerSocket,并监听一个端口
2.获取连接过来的Socket客户端对象,通过serverSocket对象的accept方法
3.客户端如果发送来数据,那么服务端使用对应的客户端对象,并获取到该对象
的读取流来获取发过来的数据,并打印在控制台上
4.关闭服务端(可选)
该例子出现的问题: 通过键盘录入出现的
现象:客户端和服务端两端都在等待,为什么呢?
因为客户端和服务端都有阻塞式方式,这写方法没有读到结束标记
那么就一直在等待,而导致两端都在等待
/*文件转换器客户端 */import java.io.*;import java.net.*;class Client {public static void main(String[] args)throws Exception {//Socket(InetAddress address, int port) // 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。Socket s=new Socket("192.168.100.3",1314); // OutputStream getOutputStream() // 返回此套接字的输出流。PrintWriter pw=new PrintWriter(s.getOutputStream(),true);BufferedReader br=new BufferedReader(new InputStreamReader(System.in));// InputStream getInputStream() // 返回此套接字的输入流。 BufferedReader brin=new BufferedReader(new InputStreamReader(s.getInputStream()));String line=null;while((line=br.readLine())!=null){pw.println(line);System.out.println(brin.readLine());}br.close();s.close();}}
/*文字转换器服务端*/import java.io.*;import java.net.*;class Server {public static void main(String[] args)throws Exception {ServerSocket ss=new ServerSocket(1314);while(true){Socket s=ss.accept();BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));PrintWriter pw=new PrintWriter(s.getOutputStream(),true);String line=null;while((line=br.readLine())!=null){ pw.println(line.toUpperCase());}}}}
/*TCP复制文本文件 */import java.io.*;import java.net.*;class PicClient{public static void main(String[] args)throws Exception {Socket s=new Socket("192.168.100.3",1314); BufferedReader br=new BufferedReader(new FileReader("test.txt")); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); BufferedReader brin=new BufferedReader(new InputStreamReader(s.getInputStream())); String line=null; while((line=br.readLine())!=null){ bw.write(line); bw.newLine(); bw.flush(); } s.shutdownOutput(); System.out.println(brin.readLine()); br.close(); s.close();}}class PicServer{public static void main(String []args)throws Exception{ServerSocket ss=new ServerSocket(1314);Socket s=ss.accept();BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));BufferedWriter bw=new BufferedWriter(new FileWriter("server.txt"));String line=null;while((line=br.readLine())!=null){bw.write(line);bw.newLine();bw.flush();}bw.close();s.close();ss.close();}}
—————————— ASP.Net+Android+IOS开发、.Net培训、期待与您交流!——————————
0 0
- 黑马程序员--- 学习笔记(第二十三天)
- 黑马程序员--Java基础学习(网络编程)第二十三天
- 第二十三天学习笔记
- 黑马程序员--- 学习笔记(第二十一天)
- 黑马程序员--第二十三天:网络编程第一天
- 黑马程序员——java第二十三天:网络编程
- 黑马程序员-第二十三天(字符编码)
- 黑马程序员-第二十三天(字符编码)
- 黑马程序员 —— 网络编程 (第二十三天)
- 黑马程序员--- 学习笔记(第三天)
- 黑马程序员--- 学习笔记(第十三天)
- “黑马程序员”学习笔记十
- 第二十三天:听课笔记
- Java学习第二十三天
- 黑马程序员——>第二十三天<网络编程(概述-UDP-TCP)>
- 黑马程序员--- 学习笔记(第二天)
- 黑马程序员--- 学习笔记(第二十四天)
- No_16_0324 Java基础学习第二十三天
- android adb shell 命令大全
- C语言实现2048游戏
- 华为实习面试总结
- 一个小细节
- 使用智能指针优化C++类对象深度复制效率问题
- 黑马程序员--- 学习笔记(第二十三天)
- POI 导入excel数据自动封装成model对象--代码
- Go语言 Go加密之DES
- Nsrimer类的基础使用
- jQuery调用WebService返回JSON数据
- windows 多线程编程的几点经验 (防止死锁)
- POI 导入excel数据自动封装成model对象--代码分析
- cocos2dx-3.0rc2 build on Eclipse
- 黑马程序员--- 学习笔记(第二十四天)