赞
踩
网络编程–TCP和UDP
网络编程–HTTP和HTTPS
网络编程-Socket
import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; /** * TCP协议Socket使用BIO进行通行:服务端 * * @Auther: curry * @Date: 2022/01/27/16:30 * @Description: */ public class Server { public static void main(String[] args) { //1单线程服务 ServerSocket server = null; Socket socket = null; InputStream in = null; OutputStream out = null; try { server = new ServerSocket(8000); System.out.println("服务端启动成功,监听端口为8000,等待客户端连接..."); while (true){ socket = server.accept(); //等待客户端连接 System.out.println("客户连接成功,客户信息为:" + socket.getRemoteSocketAddress()); in = socket.getInputStream(); byte[] buffer = new byte[1024]; int len = 0; //读取客户端的数据 while ((len = in.read(buffer)) > 0) { System.out.println(new String(buffer, 0, len)); } //向客户端写数据 out = socket.getOutputStream(); out.write("hello!".getBytes()); } }catch (Exception e){ e.printStackTrace(); } } }
import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.util.Scanner; /** * TCP协议Socket:客户端 * * @Auther: curry * @Date: 2022/01/27/16:40 * @Description: */ public class Client { public static void main(String[] args) throws IOException { //创建套接字对象socket并封装ip与port Socket socket = new Socket("127.0.0.1", 8000); //根据创建的socket对象获得一个输出流 OutputStream outputStream = socket.getOutputStream(); //控制台输入以IO的形式发送到服务器 System.out.println("TCP连接成功 \n请输入:"); while (true){ byte[] car = new Scanner(System.in).nextLine().getBytes(); outputStream.write(car); System.out.println("TCP协议的Socket发送成功"); //刷新缓冲区 outputStream.flush(); } } }
import java.net.DatagramPacket; import java.net.DatagramSocket; /** *UDP协议Socket:服务端 * * @Auther: curry * @Date: 2022/01/27/16:51 * @Description: */ public class Server1 { public static void main(String[] args) { try { //DatagramSocket代表声明一个UDP协议的Socket DatagramSocket socket = new DatagramSocket(8080); //byte数组用于数据存储 byte[] car = new byte[1024]; //DatagramPacket 类用来表示数据报包DatagramPacket DatagramPacket packet = new DatagramPacket(car, car.length); //创建DatagramPacket的receive()方法来进行数据的接收,等待接收一个socket的请求后才执行后续操作 System.out.println("等待UDP协议传输数据"); socket.receive(packet); //packet.getLength返回将要发送或者接收的数据的长度 int length = packet.getLength(); System.out.println("有数据来了===:" + new String(car, 0, length)); socket.close(); System.out.println("UDP协议Socket接受成功"); } catch (Exception e) { e.printStackTrace(); } } }
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; /** * UDP协议Socket:客户端 * * @Auther: curry * @Date: 2022/01/27/16:52 * @Description: */ public class Client1 { public static void main(String[] args) { try { //DatagramSocket代表声明一个UDP协议的Socket DatagramSocket socket = new DatagramSocket(8080); //字符串存储人Byte数组 byte[] car = "UDP协议的Socket请求,有可能失败哟".getBytes(); //InetSocketAddress类主要作用是封装端口 InetSocketAddress address = new InetSocketAddress("127.0.0.1", 8080); //DatagramPacket 类用来表示数据报包DatagramPacket DatagramPacket packet = new DatagramPacket(car, car.length); //send() 方法发送数据包 socket.send(packet); System.out.println("UDP协议的Socket发送成功"); socket.close(); } catch (Exception e) { e.printStackTrace(); } } }
类名 | 用于 | 作用 |
---|---|---|
Socket | TCP协议 | Socket类同时工作于客户端和服务端,所有方法都是通用的,这个类三个主要作用,校验包信息,发起连接(Client),操作流数据(Client/Server) |
ServerSocket | TCP协议 | ServerSocket表示为服务端,主要作用就是绑定并监听一个服务器端口,为每个建立连接的客户端“克隆/映射”一个Socket对象,具体数据操作都是通过这个Socket对象完成的,ServerSocket只关注如何和客户端建立连接 |
DatagramSocket | UDP协议 | DatagramSocket 类用于表示发送和接收数据报包的套接字 |
DatagramPacket | UDP协议 | DatagramPacket 类用来表示数据报包,数据报包用来实现无连接包投递服务 |
InetAddress | IP+端口号 | Java提供了InetAddress类来代表互联网协议(IP)地址,InetAddress类没有提供构造器,而是提供了如下两个静态方法来获取InetAddress实例 |
InetSocketAddress | IP+端口号 | 在使用Socket来连接服务器时最简单的方式就是直接使用IP和端口,但Socket类中并未提供这种方式,而是靠SocketAddress的子类InetSocketAddress来实现 IP 地址 + 端口号的创建,不依赖任何协议 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。