소켓프로그래밍 Network UDP
소켓프로그래밍 : 채팅
통신방식
UDP : 비연결형 ; 무전기, 개인 쪽지, 문자메세지
TCP : 연결형 ; 핸드폰, 1:1채팅
* TCP : Socket, ServerSocket
상대방과 1:1로 연결이 유지되는 객체
// Sender class
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.net.SocketException;
public class UDPSender {
public static void main(String[] args) {
try(DatagramSocket ds = new DatagramSocket();) {
System.out.println(ds.getLocalPort());
String data = "장땡땡";
byte[] b = data.getBytes();
//send용 패킷
SocketAddress address = new InetSocketAddress("000.000.00.000", 23232);
//아이피 주소와 포트번호를 관리하는 객체
DatagramPacket packet = new DatagramPacket(b,b.length,address);
//데이터 전송
ds.send(packet);
System.out.println("패킷 전송!");
//데이터 받기
b = new byte[1024];
packet.setData(b);
ds.receive(packet);
b = packet.getData();
//전송 받은 데이터를 byte형태로 반환해주는 메소드
System.out.println(new String(b));
System.out.println(b.length);
System.out.println(packet.getLength());
}catch(SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
출력화면


** CMD에서 IP주소 확인하기

cmd > 관리자 명령 프로토콜

ipconfig로 내 ip주소 확인
// Receiver class
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UDPReceiver {
public static void main(String[] args) {
/*
UDP 방식
DatagramSocket : 메신저 역할
DatagramPacket : 문자 역할
*/
DatagramSocket socket = null;
try {
socket = new DatagramSocket(23232);
// 디폴트 생성자로 생성 시에는 포트번호를 알아서 생성한다
// 이미 사용중이거나 없는 포트번호면 SocketException이 발생
// TCP와 UDP일 경우는 겹쳐도 된다
System.out.println(socket.getLocalPort());
} catch (SocketException e) {
e.printStackTrace();
}
try {
while(true) {
// 받는 작업
byte[] b = new byte[1024];
DatagramPacket packet = new DatagramPacket(b,b.length);
socket.receive(packet);
// 대기상태에 있다가 실제 전달받으면 다음으로 넘어간다
System.out.println(packet.getSocketAddress());
System.out.println(new String(b));
//전송
b = "수신 성공".getBytes();
packet.setData(b);
socket.send(packet);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
출력화면

콘솔창에서 receiver 출력

출력화면

CMD에서 UDP 송수신 확인하기

cmd > 관리자 명령 프로토콜
c:
cd [bin값 입력]
sender:
java sender.UDPSender
receiver:
java receiver.UDPReceiver
** version 관련 Error 발생
해당 오류는 현재 사용하고 있는 JAVA의 SE버전이 높아서 그런 것으로
SE11로 낮추어 준다
JRE에서 마우스 우클릭 > Build Path > Configure Build Path
JRE System Library 더블클릭해서 라이브러리 실행
JAVA SE11버전으로 낮추어 설정
'Backend > JAVA' 카테고리의 다른 글
JAVA 소켓프로그래밍 Network TCP (0) | 2023.03.13 |
---|---|
JAVA 코딩 API (Application Programming Interface) - Map (0) | 2023.03.04 |
JAVA 코딩 API (Application Programming Interface) - String, Object (0) | 2023.03.03 |
JAVA 코딩 API (Application Programming Interface) - charstream, singlebyte (1) | 2023.03.03 |
JAVA 코딩 API (Application Programming Interface) - Math, System, Date, Scanner (1) | 2023.03.03 |