黑马程序员——网络编程
来源:互联网 发布:mac版魔兽世界大脚插件 编辑:程序博客网 时间:2024/06/01 22:08
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
网络编程:
要理解网路编程,就要先知道什么是计算机网络。
计算机网络:是指将地理位置不同且具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
由此我们就知道,网络编程就是用来实现网络互联,使不同计算机上运行的程序,可以进行数据交换。
网络编程既然是不同计算机的程序进行数据交换,那么如何进行交换?
要想实现数据交换,就要遵守网络编程三要素:
1、IP地址:
获取方法:InetAddress类是表示互联网协议(IP)地址。该类中getHostAddress()方法。
2、端口号:
是应用程序的标识。范围:0-65535。其中0-1024不建议使用。
3、传输协议:
UDP:数据打包,限制容量,不建立连接,效率高,不安全。可以用于传输视频或mp3等,一些缺少点数据无关紧要,可靠性要求低,传输经济的应用。
TUP:建立数据通道,不限制容量,效率低,安全。也称为三次握手协议。主要用于数据下载,文件传输,可靠性要求高的应用。
结合三要素,还要知道什么是Socket机制:
Socket是网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字,套接字就是两台及其间通信的端点。
1、通信两端都应该有Socket对象。
2、所有的通信都是通过Socket键的IO进行操作的。
Socket机制具体结构图如下:
一、UDP协议进行数据传输:
1、DatagramSocket类是UDP用来发送和接受数据报包的套接字。
2、DatagramPacket类表示数据报包。
3、接收端和发送端必须各自是独立的运行程序,一般先写接收端。
4、接收端要调用receive(DatagramPacket p)接受方法,发送端要调用send(DatagramSocket p)发送方法。
5、都是要先开启接收端,再开启发送端才能接受到数据。
6、数据传输完毕后都要释放资源。
UDP接收端演示:
import java.net.DatagramPacket;import java.net.DatagramSocket;/** * 接收端 */public class ReceiveDemo { public static void main(String[] args)throws Exception{//创建UDP套接字接收端对象,并绑定端口号 DatagramSocket ds = new DatagramSocket(55555); //创建接受容器 byte[] bys = new byte[1024]; //创建数据报包对象,接受传输数据 DatagramPacket dp = new DatagramPacket(bys,bys.length); //调用接受方法 ds.receive(dp); //创建字符串对象,将传输数据转换为字符串 String str = new String(dp.getData(),0,dp.getLength()); System.out.println("接受数据为:"+str); //释放资源 ds.close();}}<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
UDP发送端演示:
import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;/** * 发送端 */public class SendDemo { public static void main(String[] args)throws Exception{//创建UDP套接字发送端对象 DatagramSocket ds = new DatagramSocket(); //写数据,将字符串转为字节数组 byte[] bys = "我是传输数据!".getBytes(); //创建数据报包对象,将长度为length的字节数组发送到指定IP和端口 DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("MDONG"),55555); //调用发送方法 ds.send(dp); //释放资源 ds.close();}}
二、TUP协议进行数据传输:
1、Socket类是实现TUP协议客户端套接字,ServerSocket类是实现TUP协议服务端套接字。
3、客户端和服务端必须各自是独立的运行程序,一般先写服务端。
4、客户端和服务端是用IO流进行数据传输。此IO是Socket类建立通道的流。
5、服务端有个方法,accept()监听是否有客户端进行连接,并返回该客户端(三次握手)。
6、必须先开启服务端,再开启客户端,反之程序会报错。
7、数据传输完毕后都要释放资源。
TUP服务端演示:
import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;/** * 服务端 */public class ServerSocketDemo { public static void main(String[] args)throws Exception{ //创建服务端套接字对象,并绑定端口号ServerSocket ss = new ServerSocket(55555);//监听是否有客户端连接Socket s = ss.accept();//获取Socket通道里的字节输入流,并包装成字符输入流BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));//直接读取数据并输出String str = br.readLine();System.out.println("服务端接受数据:"+str);//释放资源。正常情况下,服务端都是不会关闭的s.close();}}
TUP客户端演示:
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.Socket;/** * 客户端 */public class SocketDemo { public static void main(String[] args)throws Exception{//创建客户端套接字对象,并连接到指定的主机名(IP)和端口号 Socket s = new Socket("MDONG",55555); //键盘录入数据 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //获取Socket通道内的字节输入流,并转为字符输入流 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); //把键盘录入的数据写入通道内 bw.write(br.readLine()); bw.newLine(); bw.flush(); //释放资源 s.close(); }}
UDP和TUP数据传输的总结:
1、套接字对象:
UDP接受和发送都是同一个套接字对象
TUP接受和发送都有各自的套接字对象
2、传输方法:
UDP是先建立字节数组容器,再建立数据包接受和发送
TUP是一端输入流,另一端输出流。反之即可
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------- 黑马程序员— 网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员 — 网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- SeekBar跟TextView跟着拖动
- 被工业4.0唬着了没?
- iOS开发之数据传递(二)
- MQ、JMS以及ActiveMQ 关系的理解
- Linux下安装Nginx详细图解教程
- 黑马程序员——网络编程
- oracle 数据类型
- GTK+重拾--06 布局管理器学习
- 虚函数与多态
- Mybatis 多对一查询
- End-To-End Memory Networks
- 程序在CPU中运行的机制
- jsp低级错误,记下来专贴
- Java并发编程:Thread类的使用(1)