고급 JAVA
JAVA UDP 통신
햄찌개
2020. 10. 15. 15:14
Server
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Date;
public class UdpServer {
private DatagramSocket socket;
//시작 메서드
public void start() throws IOException {
// 포트 8888번을 사용하는 소켓을 생성한다.
socket = new DatagramSocket(8888);
// 패킷 송수신을 위한 객체 변수선어
DatagramPacket inPacket, outPacket;
//패킷 수신을 위한 바이트 배열 선언
byte[] inMsg = new byte[10];
//패킷 송신을 위한 바이트 배열 선언
byte[] outMsg;
while(true) {
//데이터 수신을 위한 패킷을 생성한다.
inPacket = new DatagramPacket(inMsg, inMsg.length);
System.out.println("패킷 수신 대기중 ...");
//패킷을 통해 데이터를 수신(receive)한다.
socket.receive(inPacket);
System.out.println("패킷 수신 완료...");
//수신한 패킷으로 부터 client의 IP주소와 Port를 얻는다.
InetAddress address = inPacket.getAddress();
int port = inPacket.getPort();
// 서버의 현재 시간을 시분초 형태([hh:mm:ss])로 반환한다.
SimpleDateFormat sdf = new SimpleDateFormat("[hh:mm:ss]");
String time = sdf.format(new Date());
outMsg = time.getBytes(); // 시간문자열을 byte배열로 변환한다. //getBytes()해당 문자열을 byte 값으로 바꿔줌
//패킷을 생성해서 client에게 전송(send)한다.
outPacket = new DatagramPacket(outMsg, outMsg.length,address,port);
socket.send(outPacket);//전송시작
}
}
public static void main(String[] args) throws IOException {
new UdpServer().start();
}
}
Client
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class UdpClient {
//시작메서드
public void start() throws IOException, UnknownHostException {
DatagramSocket datagramSocket = new DatagramSocket(); // 소캣객체 생성
InetAddress serverAddress = InetAddress.getByName("192.168.45.2");
// 데이터가 저장될 공간으로 byte배열을 생성한다.(패킷 수신용)
byte[] msg = new byte[100];
DatagramPacket outPacket = new DatagramPacket(msg, 1/*1byte만 넣어줌 원래는 ~~.length*/, serverAddress, 8888);
DatagramPacket inPacket = new DatagramPacket(msg, msg.length);
datagramSocket.send(outPacket); // 패킷 전송
datagramSocket.receive(inPacket); // 패킷 수신
System.out.println("현재 서버 시간 => " + new String(inPacket.getData())); //패킷에서 데이터를 갖고올때 getData()메서드 사용
datagramSocket.close(); // 소켓 종료
}
public static void main(String[] args) throws IOException {
new UdpClient().start();
}
}