网络编程入门与网络寻址解析
立即解锁
发布时间: 2025-08-19 00:15:56 阅读量: 1 订阅数: 5 

### 网络编程入门与网络寻址解析
#### 一、网络编程入门
##### 1. Java 8 实现回声服务器和客户端
传统的回声服务器使用 `while` 循环处理客户端请求:
```java
String inputLine;
while ((inputLine = br.readLine()) != null) {
System.out.println("Client request: " + inputLine);
out.println(inputLine);
}
```
使用 Java 8 的 `Supplier` 接口和 `Stream` 对象可以实现相同功能:
```java
Supplier<String> socketInput = () -> {
try {
return br.readLine();
} catch (IOException ex) {
return null;
}
};
Stream<String> stream = Stream.generate(socketInput);
stream
.map(s -> {
System.out.println("Client request: " + s);
out.println(s);
return s;
})
.allMatch(s -> s != null);
```
客户端方面,传统的 `while` 循环:
```java
while (true) {
System.out.print("Enter text: ");
String inputLine = scanner.nextLine();
if ("quit".equalsIgnoreCase(inputLine)) {
break;
}
out.println(inputLine);
String response = br.readLine();
System.out.println("Server response: " + response);
}
```
使用 Java 8 功能实现:
```java
Supplier<String> scannerInput = () -> scanner.next();
System.out.print("Enter text: ");
Stream.generate(scannerInput)
.map(s -> {
out.println(s);
System.out.println("Server response: " + s);
System.out.print("Enter text: ");
return s;
})
.allMatch(s -> !"quit".equalsIgnoreCase(s));
```
虽然这种实现比传统实现更长,但对于更复杂的问题可以提供更简洁的解决方案。
##### 2. UDP 和多播
多播是一种定期向组发送消息的有用技术,使用 UDP 服务器和一个或多个 UDP 客户端。下面是创建多播服务器和客户端的示例:
- **多播服务器**
```java
public class MulticastServer {
public static void main(String args[]) {
System.out.println("Multicast Time Server");
DatagramSocket serverSocket = null;
try {
serverSocket = new DatagramSocket();
while (true) {
String dateText = new Date().toString();
byte[] buffer = new byte[256];
buffer = dateText.getBytes();
InetAddress group = InetAddress.getByName("224.0.0.0");
DatagramPacket packet;
packet = new DatagramPacket(buffer, buffer.length, group, 8888);
serverSocket.send(packet);
System.out.println("Time sent: " + dateText);
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
// Handle exception
}
}
} catch (SocketException ex) {
// Handle exception
} catch (IOException ex) {
// Handle exception
}
}
}
```
- **多播客户端**
```java
public class MulticastClient {
public static void main(String args[]) {
System.out.println("Multicast Time Client");
try (MulticastSocket socket = new MulticastSocket(8888)) {
InetAddress group = InetAddress.getByName("224.0.0.0");
socket.joinGroup(group);
System.out.println("Multicast Group Joined");
byte[] buffer = new byte[256];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
for (int i = 0; i < 5; i++) {
socket.receive(packet);
String received = new String(packet.getData());
System.out.println(received.trim());
}
socket.leaveGroup(group);
} catch (IOException ex) {
// Handle exception
}
System.out.println("Multicast Time Client Terminated");
}
}
```
如果在 Mac
0
0
复制全文
相关推荐









