黑马程序员——网络编程
来源:互联网 发布:js yui在线压缩 编辑:程序博客网 时间:2024/06/16 01:44
------- android培训、java培训、期待与您交流! ----------
(一)网络基础
A:所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。按照TCP/IP规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节。例如一个采用二进制形式的IP地址是“00001010000000000000000000000001”,这么长的地址,人们处理起来也太费劲了。为了方便人们的使用,IP地址经常被写成十进制的形式,中间使用符号“.”分开不同的字节。于是,上面的IP地址可以表示为“10.0.0.1”。IP地址的这种表示法叫做“点分十进制表示法”,这显然比1和0容易记忆得多。
B:IP地址的组成
IP地址= 网络号码+主机地址
A类IP地址:第一段号码为网络号码,剩下的三段号码为本地计算机的号码
B类IP地址:前二段号码为网络号码,剩下的二段号码为本地计算机的号码
C类IP地址:前三段号码为网络号码,剩下的一段号码为本地计算机的号码
特殊地址:
127.0.0.1 回环地址,可用于测试本机的网络是否有问题. ping 127.0.0.1
DOS命令ipconfig:查看本机IP地址
xxx.xxx.xxx.0 网络地址
xxx.xxx.xxx.255 广播地址
A类 1.0.0.1---127.255.255.254 (1)10.X.X.X是私有地址(私有地址就是在互联网上不使用,而被用在局域网络中的地址) (2)127.X.X.X是保留地址,用做循环测试用的。
B类 128.0.0.1---191.255.255.254 172.16.0.0---172.31.255.255是私有地址。169.254.X.X是保留地址。
C类 192.0.0.1---223.255.255.254 192.168.X.X是私有地址
D类 224.0.0.1---239.255.255.254
E类 240.0.0.1---247.255.255.254
/* * * * TCP: * 客户端:Socket * 服务器端:ServerSocket * * 一般情况:一个服务器端,同时服务多个客户端 * * ServerSocket的构造: * public ServerSocket(int port)throws IOException 指定端口,创建服务器对象 * * 完成步骤: * 建立服务器端。 * 如果是服务器端,则需要添加一步操作:通过Socket服务获取Sokect再获取其当中的IO流 public Socket accept() throws IOException建立连接后,通过Socket中的IO流(Socket流)进行数据的传输。关闭socket。同样,客户端与服务器端是两个独立的应用程序。客户端发送一条数据给服务器端,再由服务器端返回一条数据 */public class Demo01_TCPServer {public static void main(String[] args) throws Exception {//建立服务器端ServerSocket ss = new ServerSocket(60666);//从ServerSocket获取SocketSocket socket = ss.accept();//建立连接后,通过Socket中的IO流(Socket流)进行数据的传输//接收数据 InputStream inputStream = socket.getInputStream(); byte[] bytes = new byte[1024]; int len = inputStream.read(bytes); System.out.println(new String(bytes,0,len)); //发送数据 OutputStream outputStream = socket.getOutputStream(); outputStream.write("货已收到!".getBytes()); //关闭Socketsocket.close();}}
/* * TCP: * 客户端:Socket * 服务器端:ServerSocket * * 一般情况:一个服务器端,同时服务多个客户端 * * Socket的构造: * public Socket(InetAddress address, int port) throws IOException 指定目标IP与端口 * public Socket(String host, int port) throws UnknownHostException, IOException 指定目标IP与端口 * * 完成步骤:建立客户端建立连接后,通过Socket中的IO流(Socket流)进行数据的传输。关闭socket。同样,客户端与服务器端是两个独立的应用程序。 */public class Demo01_TCPClient {public static void main(String[] args) throws Exception {//建立客户端Socket socket = new Socket("192.168.137.80", 60666);//从Socket获取输出流OutputStream outputStream = socket.getOutputStream();//准备数据byte[] bytes = "我爱Socket".getBytes();//输出数据outputStream.write(bytes);//接收数据InputStream inputStream = socket.getInputStream(); byte[] bytes2 = new byte[1024]; int len; while((len=inputStream.read(bytes2))!=-1) { System.out.println(new String(bytes2,0,len)); }//关闭Socketsocket.close();}}(三)练习
/* * 接收客户端一张图片,放到传智纪录片(2).jpg中 */public class Demo01_TCPServer {public static void main(String[] args) throws Exception {//建立服务器端ServerSocket ss = new ServerSocket(60666);//从ServerSocket获取SocketSocket socket = ss.accept();//建立连接后,通过Socket中的IO流(Socket流)进行数据的传输//接收数据 BufferedInputStream bis = new BufferedInputStream(socket.getInputStream()); //创建高效文件字节输出流,用于将客户端上传的文件写出到服务器文件中 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("传智纪录片(2).jpg")); //读取byte[] bytes = new byte[1024];int len;//从客户端传入的Socket读while((len=bis.read(bytes))!=-1) {//写出到服务器端的一个文件中bos.write(bytes,0,len);}bos.close(); //关闭Socketsocket.close();}}
/* * 向服务器上传图片:传智纪录片.jpg */public class Demo01_TCPClient {public static void main(String[] args) throws Exception {//建立客户端Socket socket = new Socket("192.168.137.80", 60666);//从文件中读取内容//创建高效字节输入流BufferedInputStream bis = new BufferedInputStream(new FileInputStream("传智纪录片.jpg"));//获取向服务器输出的输出流BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());byte[] bytes = new byte[1024];int len;//从被上传的文件中读取while((len=bis.read(bytes))!=-1) {//写出到服务器端bos.write(bytes,0,len);}bis.close();//关闭Socketsocket.close();}}
(四)socket
(五)UDP
/* * DatagramSocket:此类表示用来发送和接收数据报包的Socket。 * 发送端与接收端是两个独立的运行程序。 * * 构造: * public DatagramSocket(int port) throws SocketException 创建一个指定端口的Socket对象 * 接收方法: * public void receive(DatagramPacket p)throws IOException 接收数据 将接收到的数据,接收到一个数据报包中 * * DatagramPacket:此类表示数据报包。 * 构造:public DatagramPacket(byte[] buf,int length) buf:真正存放数据的地方 length:接收到的数据长度 * 解析方法: * public byte[] getData() 获取数据 * public int getLength() 返回将要发送或接收到的数据的长度。 * public InetAddress getAddress() 获取发送端IP * * UDP接收端 * * 完成步骤: * 建立接收端 * 创建数组,用来接收数据 * 建立数据包 * 调用Socket的接收方法 * 将接收到的数据解析 * 关闭Socket。 * * 接收端先启动!阻塞等待发送端发送数据 */public class Demo01_UDPReceive {public static void main(String[] args) throws IOException {// 建立接收端//192.168.137.80DatagramSocket ds = new DatagramSocket(60688);while(true) {// 创建数组接收数据byte[] bytes = new byte[1024];// 建立数据包DatagramPacket dp = new DatagramPacket(bytes, bytes.length);// 调用Socket的接收方法ds.receive(dp);// 解析数据InetAddress IP = dp.getAddress();String sIP = IP.getHostAddress();byte[] data = dp.getData();int length = dp.getLength();String receiveData = new String(data, 0, length);// String receiveData = new String(data);System.out.println("接收到来自" + sIP + "的信息:" + receiveData);}// 关闭Socket//ds.close();}}
/* * DatagramSocket:此类表示用来发送和接收数据报包的Socket。 * 发送端与接收端是两个独立的运行程序。 * * 构造: * public DatagramSocket() throws SocketException 创建一个Socket对象 * 发送方法: * public void send(DatagramPacket p) throws IOException 发送数据 * * DatagramPacket:此类表示数据报包。 * 构造: * public DatagramPacket(byte[] buf, buf:数据 int length, length:数据长度 InetAddress address, address:对方IP地址 int port) port:端口号 * UDP发送端 * * 完成步骤: * 建立发送端。 * 创建数据 * 建立数据包。 * 调用Socket的发送方法。 * 关闭Socket。 */public class Demo01_UDPSend {public static void main(String[] args) throws SocketException, IOException {// 建立发送端DatagramSocket ds = new DatagramSocket();InetAddress IP = InetAddress.getByName("192.168.137.80");int port = 60688;InputStream is = System.in;InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);// 创建数据String data;while((data=br.readLine())!=null) {if("byebye".equals(data)) {break;}byte[] bytes = data.getBytes();int length = bytes.length;// 建立数据包DatagramPacket dp = new DatagramPacket(bytes, length, IP, port);// 发送数据包ds.send(dp);}// 关闭socketds.close();}}
- 黑马程序员— 网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员 — 网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 黑马程序员—网络编程
- 选择排序——堆排序
- 文章标题
- 杭电acm--1064
- Item 39:明智地使用private继承 Effective C++笔记
- parseInt中的转换细节
- 黑马程序员——网络编程
- Java中弹出对话框中的几种方式
- 文章标题
- HDU2025 查找最大元素
- Coursera_Stanford_ML_ex4_神经网络训练 作业记录
- html元素与间距
- 那些看着高大上的名词
- 自定义View画报表
- 优化SQL查询