概述
什么是网络编程?

Java中提供解决方案

基本通信架构CS/BS
通信三要素
IP地址-InetAddress
InetAddress

java
// 目标:
// 1.获取本机ip对象
InetAddress ip = InetAddress.getLocalHost();
System.out.println(ip.getHostAddress());
System.out.println(ip.getHostName());
// 2.获取指定ip对象
InetAddress ip2 = InetAddress.getByName("www.baidu.com");
System.out.println(ip2.getHostAddress());
System.out.println(ip2.getHostName());
// 3.判断本机与改主机是否联通:ping
boolean reachable = ip2.isReachable(5000);// 可做预警
System.out.println(reachable);
端口号

2协议UDP/TCP
UDP
UDP通信

DatagramSocket
java
public class Server {
public static void main(String[] args) throws Exception {
// 目标:服务端
// 1.创建接收端
DatagramSocket socket = new DatagramSocket(8888);
// 2.创建数据包对象(接收数据)
byte[] bytes = new byte[1024*64];
DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
// 3.接收数据(接收韭菜)
socket.receive(packet);
// 4.把数据输出
// 获取本轮传输的数据多少字节
int len = packet.getLength();
String msg = new String(bytes, 0 , len);
System.out.println(msg);
// 获取发送端的ip地址与端口
InetAddress ip = packet.getAddress();
int port = packet.getPort();
System.out.println(ip.getHostAddress() + ":" + port);
// 5.关闭资源
socket.close();
}
}
java
public class Client {
public static void main(String[] args) throws Exception {
// 目标:客户端
// 1.创建发送对象
DatagramSocket socket = new DatagramSocket();
// 2.创建数据包对象
String msg = "你好,我是客户端";
byte[] data = msg.getBytes();
DatagramPacket packet =
new DatagramPacket(data, data.length, InetAddress.getLocalHost(), 8888);
// 3.发送数据
socket.send(packet);
// 4.关闭资源
socket.close();
}
}
UDP多发多收
略
TCP
TCP通信

Socket
java
/**
* 目标:完成TCP通信:实现1发1收
*/
public class Client {
public static void main(String[] args) throws Exception {
System.out.println("客户端启动成功!!!");
// 1.创建客户端对象
Socket socket = new Socket("127.0.0.1", 8888);
// 2.从通信管道中获取字节输出流,用来发送数据给服务器
OutputStream os = socket.getOutputStream();
// 3.把低级输出流转为数据输出流
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF("在一起,好吗?");
dos.close();
// 4.释放资源
socket.close();
}
}
java
/**
* 目标:TCP服务端开发
*/
public class Server {
public static void main(String[] args) throws Exception {
System.out.println("服务端启动成功!!!");
// 1.创建一个服务器对象,绑定8888端口
ServerSocket ss = new ServerSocket(8888);
// 2.等待客户端连接
Socket socket = ss.accept();
// 3.从通信管道中获取字节输入流,读取数据
InputStream is = socket.getInputStream();
// 4.把字节输入流包装成字符输入流
DataInputStream dis = new DataInputStream(is);
// 5.读取数据
String msg = dis.readUTF();
System.out.println(msg);
// 获取客户端信息
System.out.println(socket.getRemoteSocketAddress());
// 关闭资源
dis.close();
socket.close();
}
}
TCP多发多收

TCP同时接收多个客户端(多线程)