Java Socket 프로그래밍 인스턴스(2) - UDP 기본 사용
import java.io.*;
import java.net.*;
public class UDPEchoServer {
private static final int ECHOMAX = 255; // Maximum size of echo datagram
public static void main(String[] args) throws IOException {
int servPort = 5500; // Server port
DatagramSocket socket = new DatagramSocket(servPort);
DatagramPacket packet = new DatagramPacket(new byte[ECHOMAX], ECHOMAX);
while (true) { // Run forever, receiving and echoing datagrams
socket.receive(packet); // Receive packet from client
System.out.println("Handling client at " + packet.getAddress().getHostAddress() + " on port " + packet.getPort());
socket.send(packet); // Send the same packet back to client
packet.setLength(ECHOMAX); // Reset length to avoid shrinking buffer
}
/* NOT REACHED */
}
}
2.클라이언트 코드:
import java.net.*;
import java.io.*;
public class UDPEchoClientTimeout {
private static final int TIMEOUT = 3000; // Resend timeout (milliseconds)
private static final int MAXTRIES = 5; // Maximum retransmissions
public static void main(String[] args) throws IOException {
InetAddress serverAddress = InetAddress.getByName("127.0.0.1"); // Server address
int servPort = 5500; // Server port
// Convert the argument String to bytes using the default encoding
byte[] bytesToSend = "Hi, World".getBytes();
DatagramSocket socket = new DatagramSocket();
socket.setSoTimeout(TIMEOUT); // Maximum receive blocking time(milliseconds)
// Sending packet
DatagramPacket sendPacket = new DatagramPacket(bytesToSend, bytesToSend.length, serverAddress, servPort);
DatagramPacket receivePacket = // Receiving packet
new DatagramPacket(new byte[bytesToSend.length], bytesToSend.length);
int tries = 0; // Packets may be lost, so we have to keep trying
boolean receivedResponse = false;
do {
socket.send(sendPacket); // Send the echo string
try {
socket.receive(receivePacket); // Attempt echo reply reception
if (!receivePacket.getAddress().equals(serverAddress)) {// Check
// source
throw new IOException("Received packet from an unknown source");
}
receivedResponse = true;
} catch (InterruptedIOException e) { // We did not get anything
tries += 1;
System.out.println("Timed out, " + (MAXTRIES - tries) + " more tries...");
}
} while ((!receivedResponse) && (tries < MAXTRIES));
if (receivedResponse) {
System.out.println("Received: " + new String(receivePacket.getData()));
} else {
System.out.println("No response -- giving up.");
}
socket.close();
}
}
상기 코드의 UDP 서버는 단일 라인으로 클라이언트를 한 번에 한 번만 서비스할 수 있습니다.다음은 본문의 전체 내용입니다. 더 많은 Java 문법을 보십시오.《 Thinking in Java 중국어 안내서 》、《 JDK 1.7 참조 안내서 공식 영문판 》、《 JDK 1.6 API 자바 중국어 참조 안내서 》,많은 응원 부탁드립니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.