소켓프로그래밍에서 udp 는 bind 안되나요??
글쓴이: dhyoon1 / 작성시간: 금, 2013/10/04 - 4:34오후
자바 udp 소켓 프로그래밍 공부를하고 있는 초보입니다...
//UDP소켓을 생성하고
Socket = new DatagramSocket();
//UDP소켓의 출발지 IP와 PORT를 설정하기 위해 bind
Socket.bind(new InetSocketAddress("192.168.41.181, 56633));
이러면 bind 부분에서 에러가 나네요;;;
원래 UDP 는 bind 함수를 못거는건가요??
답변좀 부탁드립니다 ㅠㅠ
Forums:
아 그리고..bind 함수가..
bind 함수가 소켓을 열고 데이터를 보낼때 출발지IP 와 PORT를 설정해주는 함수가 맞나요..?
....
Bind를 설명하기 전에 TCP와 UDP의 차이점을 알아야 합니다.
TCP/IP 계층에서 보았을 때 TCP와 UDP 모두 transport 계층에 있습니다. 둘 다 동급의 프로토콜로 동일한 기능을 담당한다는 뜻입니다. 같은 기능을 하면 하나만 있으면 될 걸 왜 2개나 존재하는 걸까요?
두 방식에는 큰 차이점이 있기 때문입니다.
연결지항적이냐 비연결지향적이냐 이 차이입니다.
TCP는 연결지향적이므로 안정성과 신뢰성에 기반을 두고 있어 패킷이 전송 도중 손실되었을 경우 재전송을 요청하는 프로토콜이며 UDP는 비연결지향적이므로 그냥 데이터를 전송하기만 합니다. 중간에 손실되든 말든 상관 안 하겠다는 거죠.
좀 비약이긴 하지만 대략 이런 시스템입니다.
이 때문에 TCP는 데이터 통신 전 상대방을 확인하는 절차를 거치게 됩니다. 이 때 세션을 맺어 연결된 세션을 통해서 데이타의 흐름이 이루어지는데 이 과정에서 bind가 필요하게 됩니다.
그 반면 UDP 는 세션을 만들지도 많고 그냥 보내고 받기만을 한다. 그러므로 우리가 UDP 서비스를 하는 서버로 메시지를 보냈다고 하더라도, 메시지가 실제로 도착되었는지는 알수가 없습니다.
이런 이유로 UDP는 bind가 필요하지 않습니다.
자신IP:1111 > 8.8.8.8:2222로 "hello world" 패킷을 보내는 예제
local binding이 되지 않는 이유는 여러가지가 있을 수 있습니다.
1. local ip binding이 안될 때가 있는데 이는 OS의 권한 문제일 수 있음.
2. local port binding이 되지 않는 것은 다른 프로세스가 해당 port를 잡고 있을 수도 있음.
3. 일부 OS에서는 binding 정보가 해당 프로세스가 죽은 이후 시간이 좀 지나야 해제되는 경우도 있음.
자신IP:1111 > 8.8.8.8:2222로 "hello world" 패킷을 보내는 예제입니다. 참고하시기 바랍니다.
www.gilgil.net
댓글 달기