一、网络编程中的重要的类
1、InetAddress:互联网协议(IP)地址 封装计算机的IP地址和DNS(域名解析),没有端口,构造器私有化。通过相关方法得到。
例如:
public class InetDemo01 {
public static void main(String[] args) {
try {
InetAddress inetAddress=InetAddress.getByName("www.baidu.com");
//返回IP地址 127.0.0.1
System.out.println(inetAddress.getHostAddress());
//返回 localhost
System.out.println(inetAddress.getHostName());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2.URL类 :统一资源定位符
public class InetDemo02 {
public static void main(String[] args) {
try {
URL url = new URL("http://www.baidu.com:80/index.html#aa?uname=yym");
System.out.println(url.toString());
System.out.println("协议:"+url.getProtocol());
System.out.println("域名:"+url.getHost());
System.out.println("端口:"+url.getPort());
System.out.println("资源:"+url.getFile());
System.out.println("相对路径:"+url.getPath());
System.out.println("锚点:"+url.getRef());
//有锚点时参数为空
System.out.println("参数:"+url.getQuery());
url = new URL("http://www.baidu.com/a/");
url = new URL(url,"b.txt");
System.out.println(url.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
3、TCP协议:像电话 ,必须先建立连接,安全可靠,但是效率低;
UDP协议:像短信,不用先建立连接 ,不安全,效率高;
UDP:类DatagramSocket DatagramPacket
步骤:客户端: 服务器端:
1)创建客户端DatagramSocket 类 + 端口(客户端端口) 1)创建服务器端DatagramSocket类+端口(服务器端端口)
2)准备数据 字节数组 2)准备接收容器 字节数组
3)打包数据DatagramPacket + 并指定服务器地址及端口 3)封装DatagramPacket
4)客户端发送打包数据 4)服务器端接收数据
5)释放资源 5)拆包 + 分析数据
6)释放资源
客户端:
public class MyClient {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket(6666); //创建客户端DatagramSocket 类 + 端口(客户端端口)
String msg = "这是要发的数据";
byte[] data = msg.getBytes(); //把要发的数据封装成字节数组
DatagramPacket packet = new DatagramPacket(data, data.length, new InetSocketAddress("localhost", 8888));//将数据打包,并指定服务器地址及端口
datagramSocket.send(packet); //客户端发送打包数据
datagramSocket.close(); //释放资源
}
}
服务器端:
public class MyServler {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket(8888); //创建服务器端DatagramSocket类+端口(服务器端端口)
byte[] container =new byte[1024]; //准备接收容器 字节数组 (保证一致性,发送的数据是用DatagramPacket封装的字节数组)
DatagramPacket datagramPacket = new DatagramPacket(container, container.length); //
datagramSocket.receive(datagramPacket); //服务器端接收数据
byte[] data =datagramPacket.getData(); //拆包
int len = datagramPacket.getLength(); //分析数据
System.out.println(new String(data,0,len));
datagramSocket.close(); //释放资源
}
}
TCP协议: ServerSocket Socket 客户端和服务器端必须先建立连接 再发送或者接收数据(使用流) 必须先启动服务器端,再启动客户端。
客户端:Socket socket = new Socket("localhost",8888); //创建客户端,并指定服务器端口
服务器端:
ServerSocket server = new ServerSocket(8888);//创建服务器端,并指定端口
Socket socket = server.accept(); //一旦连接此服务器的客户端启动,服务器端就会接收到
接收数据:Socket中的getInputStream();返回InputStream
发送数据:Socket中的getOutputStream();返回OutputStream