一、socket
socket就是网络通信提供的服务
网络的通信,也就是socket之间的通信
数据在两个socket间通过io传输
http和socket的区别:
http是建立在tcp上的应用层协议,其肯定也是通过socket是实现的,它是一种短链接的形式,只有客户端向服务端发送请求,彼此才建立链接。
socket是tcp和udp的一个通信编程接口。
二、java udp的发送操作
在java jdk包中,
发送数据的思路
1、java.net.DatagramSocket 负责udp数据包的发送
2、DatagramPacket负责将数据打包(制定ip,端口和数据)
3、DatagramSocket 建立的对象调用send发送将数据发送出去
4、关闭
package com.udp_send;
import java.net.SocketException;
import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.io.IOException;
/*
* 思路:
* 创建udp的socket服务
* 将数据打包
* 将udp的数据通过socket包发送出去
* 关闭socket服务
*/
public class udp_send {
public static void main(String[] args)throws SocketException,UnknownHostException,IOException{
//用于发送和接收数据包套接字
DatagramSocket d1 = new DatagramSocket();
//给数据打包
//DatagramPacket(byte[] buf, int length, InetAddress address, int port)
//构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
String data = "hello world";
byte[] buf = data.getBytes();
DatagramPacket pac = new DatagramPacket(buf,buf.length,InetAddress.getByName("172.31.21.252"),8899);
d1.send(pac);
d1.close();
}
}
三、java udp的接收操作
思路:
1、用java.net.DatagramSocket建立接收socket对象
2、接收对象之后,接收到的是一个数据包。。所以我们要建立一个java.net.DatagramPacket的数据包
3、DatagramSocket建立的对象调用receive方法将数据接收到2中的对象
4、利用DatagramPacket的一些方法getAddress()等,各个数据接收过来。
package com.udp_receive;
import java.net.SocketException;
import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.io.IOException;
//思路
//创建 udp socket服务,必须要明确端口号
//创建数据包,将接收到的数据包存储
//调用receive,接收数据
public class udp_receive {
public static void main(String[] args)throws SocketException,IOException{
DatagramSocket r1 = new DatagramSocket(8899);
byte[] a = new byte[1024];
DatagramPacket pac = new DatagramPacket(a,a.length);
//接收数据包
r1.receive(pac); //将数据接收到pac中
//将数据解析
String ip = pac.getAddress().getHostAddress();
int port = pac.getPort();
String www = new String(pac.getData());
System.out.println("ip is:"+ip);
System.out.println("port is:"+port);
System.out.println("content is:"+www);
}
}