InetAddress 和 InetsocketAddress
InetAddress:封装IP及DNS
方法:
getHostAddress() 返回ip地址
getHostName() 返回于域名 | 本机为计算机名
InetAddress.getLocalHost()
InetAddress.getByName(” [ ip_Address|域名 ] “)
InetsocketAddress:InetAddress基础上封装端口
URL
URI(Uniform resource identifer)统一资源标识符,用来唯一的标识一个资源
URL(Uniform resource Locator)统一资源定位符,他是一个具体的URI
四部分组成:协议、存放资源的主机域名、端口、资源文件名(/ 相对主机的路径)
创建
URL(String spec) 绝对路径构建
URL(URL context, String res) 相对路径构建
获取资源
openStream()
BufferedReader() 转换编码
UDP
java.lang.Object
|—— java.net.DatagramSocket
类 DatagramSocket DatagramPacket
1、客户端
- 创建客户端 DatagramSocket
- 准备数据 字节数组
- 打包 DatagramPacket + 服务器地址及端口
- 发送
- 释放资源
2、服务端
- 创建服务端 DatagramSocket类+指定端口
- 创建接受容器 字节数组 封装 DatagramPacket包 接收数据
- 分析
- 释放资源
示例
服务端
public static void main(String[] args) throws IOException {
//创建服务器 端口
DatagramSocket server = new DatagramSocket(8888);
//准备接收容器
byte[] container = new byte[1024];
//封装成包
DatagramPacket packet = new DatagramPacket(container, container.length);
//接收数据
server.receive(packet);
//分析数据
byte[] data = packet.getData();
int len = packet.getLength();
System.out.println(new String(data, 0, len));
server.close();
}
客户端
public static void main(String[] args) throws IOException {
DatagramSocket client = new DatagramSocket(6666);
String msg="udp coding";
byte[] data = msg.getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, new InetSocketAddress("localhost",8888));
client.send(packet);
client.close();
}
TCP
java.lang.Object
|——java.net.Socket
和Datagramdsocket并没有继承关系
1、面向连接
请求——响应
Request——Response
2、Socket编程
服务器和客户端之间的双向管道就叫Socket,
一个连接对应一个Socket,站在服务器还是客户端都是对应这一条Socket
不同连接建立不同的Socket
1、 服务端 ServerSocket
先启动服务器再连接
创建服务器 指定端口 ServerSocket(int port) <1024以下留给系统使用>
接受客户端的连接 阻塞式 accept()
发送数据 接收数据
new BufferedWriter(new OutputStreamReader(< Socket>.getOutputStream(……)))
2、客户端 Socket
创建客户端 必须指定服务端+端口 自己的端口是系统自动分配的 Socket
接受数据 getInputStream
多个客户端_聊天室原理
为每一个连接建立一个线程
聊天室:中转站
客户端可以发送数据 接受数据
服务端为每一个客户端创建一个线程
……