1.单个发送端对单个接收端, 唯一的注意事项就是发送端发送的地址和端口和接受端的地址和端口要对应
发送端示例:
public class Sender {
??? public static void main(String[] args) throws IOException {
??????? //1.创建udp的发送的对象 DatagramSocket,如果不给端口, 则随机给定一个端口
??????? DatagramSocket datagramSocket = new DatagramSocket();
??????? //2.发送数据
??????? // String s = "你好我来了???,准备好了宝贝~~~";
??????? Scanner scanner = new Scanner(System.in);
??????? while (true) {
??????????? String s = scanner.next();
??????????? //参数1: 数据的字节数组表现形式 2. 要是数据有效长度, 指的字节的长度 3.要发送的地址 4.要发送的端口
??????????? DatagramPacket p = new DatagramPacket(s.getBytes(), s.getBytes().length, InetAddress.getByName("192.168.38.45"), 10086);
??????????? datagramSocket.send(p);
??????? }
??????? //3.释放资源
??????? //datagramSocket.close();
??? }
}
接收端示例:
public class Receiver {
??? public static void main(String[] args) throws IOException {
??????? //创建接受端的socket, 因为发送端已经指定端口
??????? DatagramSocket datagramSocket = new DatagramSocket(10086);
??????? //接受数据receive接受
??????? DatagramPacket p = new DatagramPacket(new byte[1024],1024);
??????? while (true) {
??????????? datagramSocket.receive(p);//他是一个阻塞方法, 如果么有人发送数据,就会在这里等待
??????????? //解析数据
??????????? byte[] data = p.getData();//获取所有的数据
??????????? int length = p.getLength();//获取数据的有效长度
??????????? //将数据转成字符串
??????????? System.out.println(new String(data,0,length));
??????? }
??????? //释放资源
??????? //datagramSocket.close();
??? }
}
2.相关构造和功能
1.客户端
Socket("要连接的服务器的ip地址", 我们要连接的端口)Socket s = new Socket("127.0.0.1", 10086);
获取"输出流"和"输入流"来和服务器进行交互
OutputStream os = s.getOutputStream();获取话筒
InputStream is = s.getInputStream();获取听筒
释放资源s.close()?????? 通过Socket获取的流, 将socket关掉即可
2.服务器端
ServerSocket
作用: 他并且有直接可以收发数据的能力,只有接受客户端连接的能力
Socket accept();阻塞方法, 如果没有客户端连接, 就一直等待
获取"输出流"和"输入流"来和服务器进行交互
OutputStream os = s.getOutputStream();获取话筒
InputStream is = s.getInputStream();获取听筒
释放资源s.close()?????? 通过Socket获取的流, 将socket关掉即可