Java-网络编程(第一天)
2018-03-03 23:05
148 查看
什么是网络?
网络就像是虚拟的运输网,将单独的pc连接进行信息的交互与传输。因此它包含的知识点与规范很多。国际组织将网络分解成多层进行结构划分,功能明确。
网络模型●OSI(Open System interconnection)开放系统互联
●TCP/IP
OSI七层简介:①物理层:就是网线、光纤、无线、蓝牙将两个pc连接。(传输形式:0、1比特位)
②数据链路层:将物理层接收到的数据进行MAC地址(网卡成产是带的地址,唯一)的封装或解封装。设备:交换机:传输数据
③网络层:ip地址(192.168.1.1)的封装或解封装。设备:路由器(告诉数据路径通过那个路径②到①)
④传输层:在网络层数据知道去哪了,那么怎么去?传输层制订了一些传输数据的协议和端口号。TCP(传输控制协议):传输效率低,可靠性高。UDP(用户数据报协议):传输可靠性低
⑤ 会话层:通过传输层给的端口号(传输端口与接收端口)建立数据传输通路。开始会话,也就是你的pc发起会话或者接受会话。(就是两个pc通过ip或则MAC或者主机名进行相互认识的过程)
⑥表示层:对接收数据的数据进行解释,加密或解密、压缩或解压缩的过程。把二进制数据转换成人类识别的文字图片的过程
⑦应用层:就是指的浏览器、qq之类的应用软件。
我们以传输图片为例:
OSI七层在实际操作过程中太过于繁琐,所以将一些过程进行整合出现TCP/IP协议(四层)
网络通讯(三要素)IP地址、端口号、传输协议。
DNS(域名系统):建立连接必需通过ip地址,但是ip地址又不太好记,因此给每个ip地址一个域名,我们通过访问域名,通过域名解析得到对应的ip地址,进行连接通讯。
Socket(通讯端点【专业术语:套接字】):任何要进行数据传输的(源pc与目的pc)都要有Socket才能进行数据的传输。
通过上面的传输流程与规则,JAVA封装了一些对象用于完成网络传输。
IP对象:InetAddress
DatagramPacket类:将数据打包,抛出数据包进行传输。
聊天室小demo
public class Rece implements Runnable{
private DatagramSocket ds;
public Rece(DatagramSocket ds){
this.ds=ds;
}
@Override
public void run() {
try{
while(true){
byte[]buf=new byte[1024];
DatagramPacket packet=new DatagramPacket(buf, buf.length);
ds.receive(packet);
String date=new String(packet.getData(),0,packet.getLength());
System.out.println(date);
if(date.equals("886")){
System.out.println(packet.getAddress().getHostAddress()+"....退出聊天室");
}
}
}catch (Exception e) {
}
}
}
ServerSocket:服务端通讯端点
案例:public static void main(String[] args) throws UnknownHostException, IOException {
/*
* 思路:
* 客户端:
* 1,需要先有socket端点。
* 2,客户端的数据源:键盘。
* 3,客户端的目的:socket.
* 4,接收服务端的数据,源:socket。
* 5,将数据显示在打印出来:目的:控制台.
* 6,在这些流中操作的数据,都是文本数据。
*
*
* 转换客户端:
* 1,创建socket客户端对象。
* 2,获取键盘录入。
* 3,将录入的信息发送给socket输出流。
*/
//1,创建socket客户端对象。
Socket s = new Socket("192.168.1.100",10004);
//2,获取键盘录入。
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
//3,socket输出流。
// new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
//4,socket输入流,读取服务端返回的大写数据
BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = null;
while((line=bufr.readLine())!=null){
if("over".equals(line))
break;
out.println(line);
//读取服务端发回的一行大写数。
String upperStr = bufIn.readLine();
System.out.println(upperStr);
}
s.close();
}
}
网络就像是虚拟的运输网,将单独的pc连接进行信息的交互与传输。因此它包含的知识点与规范很多。国际组织将网络分解成多层进行结构划分,功能明确。
网络模型●OSI(Open System interconnection)开放系统互联
●TCP/IP
OSI七层简介:①物理层:就是网线、光纤、无线、蓝牙将两个pc连接。(传输形式:0、1比特位)
②数据链路层:将物理层接收到的数据进行MAC地址(网卡成产是带的地址,唯一)的封装或解封装。设备:交换机:传输数据
③网络层:ip地址(192.168.1.1)的封装或解封装。设备:路由器(告诉数据路径通过那个路径②到①)
④传输层:在网络层数据知道去哪了,那么怎么去?传输层制订了一些传输数据的协议和端口号。TCP(传输控制协议):传输效率低,可靠性高。UDP(用户数据报协议):传输可靠性低
⑤ 会话层:通过传输层给的端口号(传输端口与接收端口)建立数据传输通路。开始会话,也就是你的pc发起会话或者接受会话。(就是两个pc通过ip或则MAC或者主机名进行相互认识的过程)
⑥表示层:对接收数据的数据进行解释,加密或解密、压缩或解压缩的过程。把二进制数据转换成人类识别的文字图片的过程
⑦应用层:就是指的浏览器、qq之类的应用软件。
我们以传输图片为例:
OSI七层在实际操作过程中太过于繁琐,所以将一些过程进行整合出现TCP/IP协议(四层)
网络通讯(三要素)IP地址、端口号、传输协议。
DNS(域名系统):建立连接必需通过ip地址,但是ip地址又不太好记,因此给每个ip地址一个域名,我们通过访问域名,通过域名解析得到对应的ip地址,进行连接通讯。
Socket(通讯端点【专业术语:套接字】):任何要进行数据传输的(源pc与目的pc)都要有Socket才能进行数据的传输。
通过上面的传输流程与规则,JAVA封装了一些对象用于完成网络传输。
IP对象:InetAddress
UDP传输:
DatagramSocket类:创建通讯端点,为数据传输提供前提。DatagramPacket类:将数据打包,抛出数据包进行传输。
聊天室小demo
public class Send implements Runnable { private DatagramSocket ds; public Send(DatagramSocket ds){ this.ds=ds; } @Override public void run() { try{ String line=null; BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); while((line=br.readLine())!=null){ byte[]buf=line.getBytes(); DatagramPacket packet=new DatagramPacket(buf, buf.length,InetAddress.getByName("127.0.0.1"),8800); ds.send(packet); if("886".equals(line)){ break; } } ds.close(); }catch (Exception e) { } } }
public class Rece implements Runnable{
private DatagramSocket ds;
public Rece(DatagramSocket ds){
this.ds=ds;
}
@Override
public void run() {
try{
while(true){
byte[]buf=new byte[1024];
DatagramPacket packet=new DatagramPacket(buf, buf.length);
ds.receive(packet);
String date=new String(packet.getData(),0,packet.getLength());
System.out.println(date);
if(date.equals("886")){
System.out.println(packet.getAddress().getHostAddress()+"....退出聊天室");
}
}
}catch (Exception e) {
}
}
}
public class TackHose { public static void main(String[]args) throws SocketException{ DatagramSocket send = new DatagramSocket(); DatagramSocket rece = new DatagramSocket(8800); Send s=new Send(send); Rece r=new Rece(rece); Thread t1=new Thread(s); Thread t2=new Thread(r); t1.start(); t2.start(); } }TCP传输Socket:客户端通讯端点
ServerSocket:服务端通讯端点
案例:public static void main(String[] args) throws UnknownHostException, IOException {
/*
* 思路:
* 客户端:
* 1,需要先有socket端点。
* 2,客户端的数据源:键盘。
* 3,客户端的目的:socket.
* 4,接收服务端的数据,源:socket。
* 5,将数据显示在打印出来:目的:控制台.
* 6,在这些流中操作的数据,都是文本数据。
*
*
* 转换客户端:
* 1,创建socket客户端对象。
* 2,获取键盘录入。
* 3,将录入的信息发送给socket输出流。
*/
//1,创建socket客户端对象。
Socket s = new Socket("192.168.1.100",10004);
//2,获取键盘录入。
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
//3,socket输出流。
// new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
//4,socket输入流,读取服务端返回的大写数据
BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = null;
while((line=bufr.readLine())!=null){
if("over".equals(line))
break;
out.println(line);
//读取服务端发回的一行大写数。
String upperStr = bufIn.readLine();
System.out.println(upperStr);
}
s.close();
}
}
public static void main(String[] args) throws IOException { /* * * 转换服务端。 * 分析: * 1,serversocket服务。 * 2,获取socket对象。 * 3,源:socket,读取客户端发过来的需要转换的数据。 * 4,目的:显示在控制台上。 * 5,将数据转成大写发给客户端。 */ //1, ServerSocket ss = new ServerSocket(10004); //2,获取socket对象。 Socket s = ss.accept(); //获取ip. String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+"......connected"); //3,获取socket读取流,并装饰。 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); //4,获取socket的输出流,并装饰。 PrintWriter out = new PrintWriter(s.getOutputStream(),true); String line = null; while((line=bufIn.readLine())!=null){ System.out.println(line); out.println(line.toUpperCase()); } s.close(); ss.close(); } }
相关文章推荐
- 奔向黑马-----新手学java-初学第一天
- Java Socket网络编程初级入门-Java基础-Java-编程开发
- Java网络编程
- java得到某年某周的第一天
- Java学习-第一天(上)
- 第一天的学习java
- 第一天JAVA之旅(回顾)
- java-日期操作-获得某月的第一天和最后一天
- java实习生入职第一天,你该干点什么???
- 初识Java网络编程
- Java编程思想学习---第一天
- 一个GIS专业java实习生的日记——上班第一天
- java第一天
- java第一天
- 黑马程序员________Java中UDP和TCP网络编程学习笔记
- 黑马程序员 Java基础学习笔记 网络编程
- 黑马程序员——java基础学习笔记——第一天
- Java中找到每月第一天、最后一天的方法
- JAVA+TOMCAT 网站部署第一天
- java基础知识——网络编程、IO流