zoukankan      html  css  js  c++  java
  • 慕课网_Java Socket应用---通信是这样练成的

    第1章 网络基础知识

    1-1 网络基础简介 (10:21)

    第2章 Java 中网络相关 API 的应用

    2-1 Java 中的 InetAddress 的应用 (08:10)

    import java.net.InetAddress;
    import java.net.UnknownHostException;
    import java.util.Arrays;
    
    public class Hello {
    	public static void main(String[] args) throws UnknownHostException {
    		// 获取本机的InetAddress实例
    		InetAddress address = InetAddress.getLocalHost();
    		System.out.println("计算机名:" + address.getHostName());
    		System.out.println("IP地址:" + address.getHostAddress());
    		byte[] bytes = address.getAddress();// 获取字节数组形式的IP地址
    		System.out.println("字节数组形式的IP:" + Arrays.toString(bytes));
    		System.out.println(address);// 直接输出InetAddress对象
    
    		// 根据机器名获取InetAddress实例
    		InetAddress address2 = InetAddress.getByName("DESKTOP-2HKVB4E");
    		System.out.println("计算机名:" + address2.getHostName());
    		System.out.println("IP地址:" + address2.getHostAddress());
    
    		// 根据IP地址获取InetAddress实例
    		InetAddress address3 = InetAddress.getByName("192.168.31.108");
    		System.out.println("计算机名:" + address3.getHostName());
    		System.out.println("IP地址:" + address3.getHostAddress());
    	}
    }
    

    2-2 Java 中的 URL 的应用 (16:24)

    创建一个URL实例

    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.UnknownHostException;
    
    /*
     * URL常用方法
     */
    
    public class Hello {
    	public static void main(String[] args) throws UnknownHostException {
    		try {
    			// 创建一个URL实例
    			URL imooc = new URL("http://www.imooc.com/");
    			// ?后面表示参数,#后面表示锚点
    			URL url = new URL(imooc, "/index.html?username=tom#test");
    			System.out.println("协议:" + url.getProtocol());
    			System.out.println("主机:" + url.getHost());
    			// 如果未制定端口号,则使用默认的端口号,此时getPort()方法返回值为-1
    			System.out.println("端口:" + url.getPort());
    			System.out.println("文件路径:" + url.getPath());
    			System.out.println("文件名:" + url.getFile());
    			System.out.println("相对路径:" + url.getRef());
    			System.out.println("查询字符串:" + url.getQuery());
    		} catch (MalformedURLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }
    

    使用URL读取网页内容

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.MalformedURLException;
    import java.net.URL;
    
    /*
     * 使用URL读取网页内容
     */
    
    public class Hello {
    	public static void main(String[] args) {
    		try {
    			// 创建一个URL实例
    			URL url = new URL("http://www.baidu.com/");
    			// 通过URL的openStream方法获取URL对象所表示的资源的字节输入流
    			InputStream is = url.openStream();
    			// 将字节输入流转换为字符输入流
    			InputStreamReader isr = new InputStreamReader(is, "utf-8");
    			// 为字符输入流添加缓冲
    			BufferedReader br = new BufferedReader(isr);
    			String data = br.readLine();// 读取数据
    			while (data != null) {// 循环读取数据
    				System.out.println(data);// 输出数据
    				data = br.readLine();
    			}
    			br.close();
    			isr.close();
    			is.close();
    		} catch (MalformedURLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }
    

    第3章 通过 Socket 实现 TCP 编程

    3-1 Socket 简介 (06:37)

    3-2 编程实现基于 TCP 的 Socket 通信之服务器端 (10:42)

    3-3 编程实现基于 TCP 的 Socke t通信之客户端 (06:01)

    3-4 完善用户登陆之服务器响应客户端 (06:09)

    3-5 使用多线程实现多客户端的通信 (14:04)

    Client

    	import java.io.BufferedReader;
    	import java.io.IOException;
    	import java.io.InputStream;
    	import java.io.InputStreamReader;
    	import java.io.OutputStream;
    	import java.io.PrintWriter;
    	import java.net.Socket;
    	import java.net.UnknownHostException;
    	
    	/*
    	 * 客户端
    	 */
    	public class Client {
    		public static void main(String[] args) {
    			try {
    				// 1.创建客户端Socket,指定服务器地址和端口
    				Socket socket = new Socket("localhost", 8888);
    				// 2.获取输出流,向服务器端发送信息
    				OutputStream os = socket.getOutputStream();// 字节输出流
    				PrintWriter pw = new PrintWriter(os);// 将输出流包装为打印流
    				pw.write("用户名:alice;密码:789");
    				pw.flush();
    				socket.shutdownOutput();// 关闭输出流
    				// 3.获取输入流,并读取服务器端的响应信息
    				InputStream is = socket.getInputStream();
    				BufferedReader br = new BufferedReader(new InputStreamReader(is));
    				String info = null;
    				while ((info = br.readLine()) != null) {
    					System.out.println("我是客户端,服务器说:" + info);
    				}
    				// 4.关闭资源
    				br.close();
    				is.close();
    				pw.close();
    				os.close();
    				socket.close();
    			} catch (UnknownHostException e) {
    				e.printStackTrace();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    

    Server

    import java.io.IOException;
    import java.net.InetAddress;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /*
     * 基于TCP协议的Socket通信,实现用户登陆
     * 服务器端
     */
    public class Server {
    	public static void main(String[] args) {
    		try {
    			// 1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
    			ServerSocket serverSocket = new ServerSocket(8888);
    			Socket socket = null;
    			// 记录客户端的数量
    			int count = 0;
    			System.out.println("***服务器即将启动,等待客户端的连接***");
    			// 循环监听等待客户端的连接
    			while (true) {
    				// 调用accept()方法开始监听,等待客户端的连接
    				socket = serverSocket.accept();
    				// 创建一个新的线程
    				ServerThread serverThread = new ServerThread(socket);
    				// 启动线程
    				serverThread.start();
    
    				count++;// 统计客户端的数量
    				System.out.println("客户端的数量:" + count);
    				InetAddress address = socket.getInetAddress();
    				System.out.println("当前客户端的IP:" + address.getHostAddress());
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }
    

    ServerThread

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.Socket;
    
    /*
     * 服务器线程处理类
     */
    public class ServerThread extends Thread {
    	// 和本线程相关的Socket
    	Socket socket = null;
    
    	public ServerThread(Socket socket) {
    		this.socket = socket;
    	}
    
    	// 线程执行的操作,响应客户端的请求
    	public void run() {
    		InputStream is = null;
    		InputStreamReader isr = null;
    		BufferedReader br = null;
    		OutputStream os = null;
    		PrintWriter pw = null;
    		try {
    			// 获取输入流,并读取客户端信息
    			is = socket.getInputStream();
    			isr = new InputStreamReader(is);
    			br = new BufferedReader(isr);
    			String info = null;
    			while ((info = br.readLine()) != null) {// 循环读取客户端的信息
    				System.out.println("我是服务器,客户端说:" + info);
    			}
    			socket.shutdownInput();// 关闭输入流
    			// 获取输出流,响应客户端的请求
    			os = socket.getOutputStream();
    			pw = new PrintWriter(os);
    			pw.write("欢迎您!");
    			pw.flush();// 调用flush()方法将缓冲输出
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} finally {
    			// 关闭资源
    			try {
    				if (pw != null)
    					pw.close();
    				if (os != null)
    					os.close();
    				if (br != null)
    					br.close();
    				if (isr != null)
    					isr.close();
    				if (is != null)
    					is.close();
    				if (socket != null)
    					socket.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    }
    

    第4章 通过 Socket 实现 UDP 编程

    4-1 DatagramPacket (03:14)

    4-2 编程实现基于 UDP的 Socket 通信之服务器端 (06:48)

    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    /*
     * 服务器端,实现基于UDP的用户登陆
     */
    public class UDPServer {
    	public static void main(String[] args) throws IOException {
    		/*
    		 * 接收客户端发送的数据
    		 */
    		// 1.创建服务器端DatagramSocket,指定端口
    		DatagramSocket socket = new DatagramSocket(8800);
    		// 2.创建数据报,用于接收客户端发送的数据
    		byte[] data = new byte[1024];// 创建字节数组,指定接收的数据包的大小
    		DatagramPacket packet = new DatagramPacket(data, data.length);
    		// 3.接收客户端发送的数据
    		System.out.println("****服务器端已经启动,等待客户端发送数据");
    		socket.receive(packet);// 此方法在接收到数据报之前会一直阻塞
    		// 4.读取数据
    		String info = new String(data, 0, packet.getLength());
    		System.out.println("我是服务器,客户端说:" + info);
    
    		/*
    		 * 向客户端响应数据
    		 */
    		// 1.定义客户端的地址、端口号、数据
    		InetAddress address = packet.getAddress();
    		int port = packet.getPort();
    		byte[] data2 = "欢迎您!".getBytes();
    		// 2.创建数据报,包含响应的数据信息
    		DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
    		// 3.响应客户端
    		socket.send(packet2);
    		// 4.关闭资源
    		socket.close();
    	}
    }
    

    4-3 编程实现基于 UDP 的 Socket 通信之客户端 (14:04)

    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    /*
     * 客户端
     */
    public class UDPClient {
    	public static void main(String[] args) throws IOException {
    		/*
    		 * 向服务器端发送数据
    		 */
    		// 1.定义服务器的地址、端口号、数据
    		InetAddress address = InetAddress.getByName("localhost");
    		int port = 8800;
    		byte[] data = "用户名:admin;密码:123".getBytes();
    		// 2.创建数据报,包含发送的数据信息
    		DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
    		// 3.创建DatagramSocket对象
    		DatagramSocket socket = new DatagramSocket();
    		// 4.向服务器端发送数据报
    		socket.send(packet);
    
    		/*
    		 * 接收服务器端响应的数据
    		 */
    		// 1.创建数据报,用于接收服务器端响应的数据
    		byte[] data2 = new byte[1024];
    		DatagramPacket packet2 = new DatagramPacket(data2, data2.length);
    		// 2.接收服务器响应的数据
    		socket.receive(packet2);
    		// 3.读取数据
    		String reply = new String(data2, 0, packet2.getLength());
    		System.out.println("我是客户端,服务器说:" + reply);
    		// 4.关闭资源
    		socket.close();
    	}
    }
    

    第5章 Socket 总结

    5-1 Socket 总结 (04:12)

    第6章 综合练习

    6-1 综合练习---问题描述. (05:20)

    6-2 综合练习---实现分析 (06:52)

  • 相关阅读:
    上篇用到的matcher函数
    lambdaj学习
    Redis高级应用——2
    Redis入门
    从gitee 下载代码到本地
    CSS中对图片(background)的一些设置心得总结
    nodejs 安装Ionic 和cordova
    Spring MVC内容协商机制详解
    基于Servlet3.0的编程式SpringMVC实例详解
    基于Junit的Spring集成测试方法
  • 原文地址:https://www.cnblogs.com/denggelin/p/7173843.html
Copyright © 2011-2022 走看看