๋ฉ€ํ‹ฐ ์บ์ŠคํŠธ์™€ ๊ด€๋ จํ•˜์—ฌ ์งˆ๋ฌธ ์žˆ์Šต๋‹ˆ๋‹ค.

688 views
Skip to first unread message

penny

unread,
Apr 22, 2009, 5:12:38โ€ฏAM4/22/09
to Netty Korean User Group
๋„คํ‹ฐ 3.1.0 ๋ฒ ํƒ€ ๋ฒ„์ „์„ ์‚ดํŽด๋ณด๋‹ˆ UDP ๋ฐ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ๋ฅผ ์ง€์›ํ•œ๋‹ค๊ณ  ํ•ด์„œ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๊ณ  ์žˆ๋Š” ์ค‘
์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ํ•˜๋‹ค๊ฐ€ ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„๋“ค์ด ์žˆ์–ด ์ด๋ ‡๊ฒŒ ์งˆ๋ฌธ์„ ์˜ฌ๋ฆฌ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

1. ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์œผ๋กœ ๋ถ€ํ„ฐ ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” UDP ๊ธฐ๋ฐ˜์˜ ๋ธŒ๋กœ๋“œ ์บ์ŠคํŠธ์ด๊ณ , ์ œ๊ฐ€ ์ด๋ฅผ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•œ ํ›„, ๋˜ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์œผ
๋กœ ์ „์†กํ•  ๋•Œ์—๋Š” UDP ๊ธฐ๋ฐ˜์˜ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ์ž…๋‹ˆ๋‹ค.
์ด ๋•Œ, ์ž‘์„ฑ๋˜๋Š” ํ•ธ๋“ค๋Ÿฌ์˜ messageReceived() ๋‚ด์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•ด๋„ ๋˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

// ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ (UDP ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ ๋ฐ›์€ ๋ฐ์ดํ„ฐ)
ChannelBuffer buffer = (ChannelBuffer) e.getMessage();
ChannelBufferInputStream is = new ChannelBufferInputStream(buffer);

// ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜ํ–‰
...

// ์ „์†ก (๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ์ฃผ์†Œ๋กœ ์ „์†ก)
e.getChannel().write(buffer, new InetSocketAddress("239.0.0.3",
20002));

์‹คํ–‰์€ ๋˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ์ด๋ ‡๊ฒŒ ํ•ด๋„ ๋˜๋Š” ๊ฒƒ์ธ์ง€์š”.
์•„, ๊ทธ๋ฆฌ๊ณ  QOTM ์˜ˆ๋ฅผ ๋ณด๋ฉด ์„œ๋ฒ„ ์ธก์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ exceptionCaught() ๋‚ด์—์„œ ์ฃผ์„์œผ๋กœ ๊ณ„์† ์„œ๋น„์Šค ํ•ด
์•ผ ํ•˜๋ฏ€๋กœ ์ปค๋„ฅ์…˜์„ ๋‹ซ์ง€ ์•Š๋Š”๋‹ค๋ผ๊ณ  ๋˜์–ด ์žˆ๋Š”๋ฐ, ๋„คํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•œ UDP ๊ธฐ๋ฐ˜์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—๋„ ๋ชจ๋‘ ์ ์šฉ๋˜๋Š” ๋‚ด์šฉ์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ
๋‹ค.

2. ์˜ˆ์ œ๋ฅผ ํ‰๋‚ด๋‚ด๊ฐ€๋ฉด์„œ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ๊ธฐ๋ฐ˜์˜ ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๋ ค๊ณ  API๋ฅผ ์‚ดํŽด๋ณด๋‹ˆ,
DatagramChannel์˜ joinGroup ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ์™€ ์—ฐ๊ด€์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„ ์•„๋ž˜์ฒ˜๋Ÿผ ์ž‘์„ฑํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

channel.joinGroup(InetAddress.getByName("239.0.0.3")); // ๋ฐ”๋กœ ์ด ๋ถ€๋ถ„

๊ทธ๋Ÿฌ๊ณ  ๋‚œ ํ›„์— ์‹คํ–‰์‹œํ‚ค๋ฉด ๋ฌด์—‡์ด ๋ฌธ์ œ์ธ ๊ฒƒ์ธ์ง€ ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ˆ์™ธ๊ฐ€ ๋‚˜๋”๊ตฐ์š”.

Exception in thread "main" org.jboss.netty.channel.ChannelException:
java.net.SocketException: error setting options
at org.jboss.netty.channel.socket.oio.OioDatagramChannel.joinGroup
(OioDatagramChannel.java:119)
at example.qotm.QuoteOfTheMomentClient.main
(QuoteOfTheMomentClient.java:34)
Caused by: java.net.SocketException: error setting options
at java.net.PlainDatagramSocketImpl.join(Native Method)
at java.net.PlainDatagramSocketImpl.join(PlainDatagramSocketImpl.java:
172)
at java.net.MulticastSocket.joinGroup(MulticastSocket.java:276)
at org.jboss.netty.channel.socket.oio.OioDatagramChannel.joinGroup
(OioDatagramChannel.java:117)
... 1 more


์‚ดํŽด๋ณด๋ฉด ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ๊ธฐ๋ฐ˜ ์†Œ์ผ“ ์˜ต์…˜์„ ์„ค์ •ํ•˜๋‹ค ๋‚˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ์ •ํ™•ํ•œ ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ๋”๊ตฐ์š”.
๋„คํ‹ฐ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์—ด์–ด๋ดค๋Š”๋ฐ ์ž๋ฐ” MulticastSock์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ ์ด์™ธ์—๋Š” ์•„๋ฌด ๊ฒƒ๋„ ์—†์–ด ๋ณด์ด๋Š”๋ฐ, ์™œ ์ด๋Ÿฐ ์˜ˆ์™ธ๊ฐ€ ๋‚˜
๋Š”๊ฑธ๊นŒ์š”?
์ œ๊ฐ€ API๋ฅผ ์ž˜๋ชป ์ดํ•ดํ•ด์„œ ์ž˜๋ชป ์ž‘์„ฑํ•œ ๊ฒƒ์ธ์ง€, ์•„๋‹ˆ๋ฉด ๋ฉ€ํ‹ฐ ์บ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋˜ ๋‹ค๋ฅธ ๋ณ„๋„์˜ ์ž‘์—…์„ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๊ฑด๊ฐ€
์š”?

Trustin Lee

unread,
Apr 22, 2009, 5:45:43โ€ฏAM4/22/09
to Netty Korean User Group
์•ˆ๋…•ํ•˜์„ธ์š” ํŽ˜๋‹ˆ๋‹˜,

On 4์›”22์ผ, ์˜คํ›„6์‹œ12๋ถ„, penny <keuns...@gmail.com> wrote:
> ๋„คํ‹ฐ 3.1.0 ๋ฒ ํƒ€ ๋ฒ„์ „์„ ์‚ดํŽด๋ณด๋‹ˆ UDP ๋ฐ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ๋ฅผ ์ง€์›ํ•œ๋‹ค๊ณ  ํ•ด์„œ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๊ณ  ์žˆ๋Š” ์ค‘
> ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ํ•˜๋‹ค๊ฐ€ ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„๋“ค์ด ์žˆ์–ด ์ด๋ ‡๊ฒŒ ์งˆ๋ฌธ์„ ์˜ฌ๋ฆฌ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
>
> 1. ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์œผ๋กœ ๋ถ€ํ„ฐ ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” UDP ๊ธฐ๋ฐ˜์˜ ๋ธŒ๋กœ๋“œ ์บ์ŠคํŠธ์ด๊ณ , ์ œ๊ฐ€ ์ด๋ฅผ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•œ ํ›„, ๋˜ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์œผ
> ๋กœ ์ „์†กํ•  ๋•Œ์—๋Š” UDP ๊ธฐ๋ฐ˜์˜ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ์ž…๋‹ˆ๋‹ค.
> ์ด ๋•Œ, ์ž‘์„ฑ๋˜๋Š” ํ•ธ๋“ค๋Ÿฌ์˜ messageReceived() ๋‚ด์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•ด๋„ ๋˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
>
> // ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ (UDP ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ ๋ฐ›์€ ๋ฐ์ดํ„ฐ)
> ChannelBuffer buffer = (ChannelBuffer) e.getMessage();
> ChannelBufferInputStream is = new ChannelBufferInputStream(buffer);
>
> // ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜ํ–‰
> ...
>
> // ์ „์†ก (๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ์ฃผ์†Œ๋กœ ์ „์†ก)
> e.getChannel().write(buffer, new InetSocketAddress("239.0.0.3",
> 20002));
>
> ์‹คํ–‰์€ ๋˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ์ด๋ ‡๊ฒŒ ํ•ด๋„ ๋˜๋Š” ๊ฒƒ์ธ์ง€์š”.

๋„ค, ๊ทธ๋ ‡๊ฒŒ ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

> ์•„, ๊ทธ๋ฆฌ๊ณ  QOTM ์˜ˆ๋ฅผ ๋ณด๋ฉด ์„œ๋ฒ„ ์ธก์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ exceptionCaught() ๋‚ด์—์„œ ์ฃผ์„์œผ๋กœ ๊ณ„์† ์„œ๋น„์Šค ํ•ด
> ์•ผ ํ•˜๋ฏ€๋กœ ์ปค๋„ฅ์…˜์„ ๋‹ซ์ง€ ์•Š๋Š”๋‹ค๋ผ๊ณ  ๋˜์–ด ์žˆ๋Š”๋ฐ, ๋„คํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•œ UDP ๊ธฐ๋ฐ˜์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—๋„ ๋ชจ๋‘ ์ ์šฉ๋˜๋Š” ๋‚ด์šฉ์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ
> ๋‹ค.

๋„ค, ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ ์†Œ์ผ“ ํ•˜๋‚˜๋กœ ์—ฌ๋Ÿฌ ์›๊ฒฉ์ง€์—์„œ ํ•œ ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ํŒจํ‚ท์„ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ์†Œ์ผ“์„ ๋‹ซ์œผ๋ฉด
์„œ๋ฒ„๋ฅผ ์ข…๋ฃŒ์‹œํ‚ค๋Š” ํšจ๊ณผ๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ์˜ˆ์™ธ๊ฐ€ ๋‚˜๋„ ์ฑ„๋„์„ ๋‹ซ์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ปค๋„ฅํŠธ๋œ DatagramChannel์˜ ๊ฒฝ์šฐ์—
๋Š” ํ•˜๋‚˜์˜ ์›๊ฒฉ์ง€์—์„œ ํ•˜๋‚˜์˜ ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ํŒจํ‚ท๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๋‹ซ์•„๋„ ๋ฌด๋ฐฉํ•  ๋“ฏ ํ•˜๋„ค์š”.

> 2. ์˜ˆ์ œ๋ฅผ ํ‰๋‚ด๋‚ด๊ฐ€๋ฉด์„œ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ๊ธฐ๋ฐ˜์˜ ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๋ ค๊ณ  API๋ฅผ ์‚ดํŽด๋ณด๋‹ˆ,
> DatagramChannel์˜ joinGroup ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ์™€ ์—ฐ๊ด€์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„ ์•„๋ž˜์ฒ˜๋Ÿผ ์ž‘์„ฑํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.
>
> channel.joinGroup(InetAddress.getByName("239.0.0.3")); // ๋ฐ”๋กœ ์ด ๋ถ€๋ถ„

์ œ๋Œ€๋กœ ํ•˜์…จ์Šต๋‹ˆ๋‹ค.

> ๊ทธ๋Ÿฌ๊ณ  ๋‚œ ํ›„์— ์‹คํ–‰์‹œํ‚ค๋ฉด ๋ฌด์—‡์ด ๋ฌธ์ œ์ธ ๊ฒƒ์ธ์ง€ ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ˆ์™ธ๊ฐ€ ๋‚˜๋”๊ตฐ์š”.
>
> Exception in thread "main" org.jboss.netty.channel.ChannelException:
> java.net.SocketException: error setting options
> at org.jboss.netty.channel.socket.oio.OioDatagramChannel.joinGroup
> (OioDatagramChannel.java:119)
> at example.qotm.QuoteOfTheMomentClient.main
> (QuoteOfTheMomentClient.java:34)
> Caused by: java.net.SocketException: error setting options
> at java.net.PlainDatagramSocketImpl.join(Native Method)
> at java.net.PlainDatagramSocketImpl.join(PlainDatagramSocketImpl.java:
> 172)
> at java.net.MulticastSocket.joinGroup(MulticastSocket.java:276)
> at org.jboss.netty.channel.socket.oio.OioDatagramChannel.joinGroup
> (OioDatagramChannel.java:117)
> ... 1 more
>
> ์‚ดํŽด๋ณด๋ฉด ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ๊ธฐ๋ฐ˜ ์†Œ์ผ“ ์˜ต์…˜์„ ์„ค์ •ํ•˜๋‹ค ๋‚˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ์ •ํ™•ํ•œ ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ๋”๊ตฐ์š”.
> ๋„คํ‹ฐ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์—ด์–ด๋ดค๋Š”๋ฐ ์ž๋ฐ” MulticastSock์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ ์ด์™ธ์—๋Š” ์•„๋ฌด ๊ฒƒ๋„ ์—†์–ด ๋ณด์ด๋Š”๋ฐ, ์™œ ์ด๋Ÿฐ ์˜ˆ์™ธ๊ฐ€ ๋‚˜
> ๋Š”๊ฑธ๊นŒ์š”?
> ์ œ๊ฐ€ API๋ฅผ ์ž˜๋ชป ์ดํ•ดํ•ด์„œ ์ž˜๋ชป ์ž‘์„ฑํ•œ ๊ฒƒ์ธ์ง€, ์•„๋‹ˆ๋ฉด ๋ฉ€ํ‹ฐ ์บ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋˜ ๋‹ค๋ฅธ ๋ณ„๋„์˜ ์ž‘์—…์„ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๊ฑด๊ฐ€
> ์š”?

์ œ ์ƒ๊ฐ์—๋Š” ์šด์˜์ฒด์ œ ๊ด€๋ จ ์ด์Šˆ๊ฐ€ ์•„๋‹๊นŒ ํ•˜๋Š”๋ฐ์š”. ์ œ ๋ฆฌ๋ˆ…์Šค ๋ฐ์Šคํฌํƒ‘์—์„œ ํ•ด ๋ณด๋‹ˆ ์ž˜ ๋˜๋Š” ๊ฒƒ ๊ฐ™์•„์„œ์š”. ํ•œ ๋ฒˆ
MulticastSocket ์„ ์ง์ ‘ ์‚ฌ์šฉํ•ด์„œ joinGroup ํ•ด์„œ ์ž˜ ๋˜๋Š”์ง€ ํ™•์ธํ•ด ์ฃผ์‹œ๊ฒ ์–ด์š”? ๊ทธ๋ž˜๋„ ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์šด์˜
์ฒด์ œ ์„ค์ •์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๊ผญ ํ•œ ๋ฒˆ ํ•ด ๋ณด์‹œ๊ณ  ํšŒ์‹  ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ณง RC ๋“ค์–ด๊ฐ€๋Š”๋ฐ ๋ฉ€ํ‹ฐ์บ์Šค
ํŠธ ๋ถ€๋ถ„์€ ํ…Œ์ŠคํŠธํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์„œ์š” ^^*

์ดํฌ์Šน ๋“œ๋ฆผ

penny

unread,
Apr 22, 2009, 6:14:11โ€ฏAM4/22/09
to Netty Korean User Group
๋น ๋ฅธ ๋‹ต๋ณ€ ์ •๋ง ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ, ๋‹ต๋ณ€ํ•˜์‹  ๋‚ด์šฉ ์ค‘์—์„œ์š”...

> ๋„ค, ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ ์†Œ์ผ“ ํ•˜๋‚˜๋กœ ์—ฌ๋Ÿฌ ์›๊ฒฉ์ง€์—์„œ ํ•œ ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ํŒจํ‚ท์„ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ์†Œ์ผ“์„ ๋‹ซ์œผ๋ฉด
> ์„œ๋ฒ„๋ฅผ ์ข…๋ฃŒ์‹œํ‚ค๋Š” ํšจ๊ณผ๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ์˜ˆ์™ธ๊ฐ€ ๋‚˜๋„ ์ฑ„๋„์„ ๋‹ซ์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ผ๊ณ  ๋ง์”€ํ•˜์‹  ๋ถ€๋ถ„์ด ์žˆ๋Š”๋ฐ, ํ•œ ์›๊ฒฉ์ง€์—์„œ ๋ฉ€ํ‹ฐ ์บ์ŠคํŠธ๋กœ ๋ฟŒ๋ฆฌ๊ฑฐ๋‚˜ ํ•œ ์›๊ฒฉ์ง€์—์„œ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๋กœ ๋ฟŒ๋ฆฌ๋Š” ๊ฒฝ์šฐ์— ํ•ด๋‹น๋˜๋Š” ๋‚ด์šฉ์ธ
๊ฒƒ์ด์ง€์š”? ์ œ๊ฐ€ ํ•˜๋Š” ๋ถ€๋ถ„ ์ค‘์— ์›๊ฒฉ์ง€๋กœ๋ถ€ํ„ฐ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ๋กœ ๋ฐ›์•„์„œ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ๋กœ ๋ฟŒ๋ ค์•ผ ํ•˜๋Š” ๋ถ€๋ถ„๋„ ์žˆ๊ฑฐ๋“ ์š”..

> ๋‹ค๋งŒ ์ปค๋„ฅํŠธ๋œ DatagramChannel์˜ ๊ฒฝ์šฐ์—๋Š” ํ•˜๋‚˜์˜ ์›๊ฒฉ์ง€์—์„œ ํ•˜๋‚˜์˜ ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ํŒจํ‚ท๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๋‹ซ์•„๋„ ๋ฌด๋ฐฉํ•  ๋“ฏ ํ•˜๋„ค์š”.

์—ฌ๊ธฐ์—์„œ ์ปค๋„ฅํŠธ๋œ DatagramChannel์ด๋ผ๋Š” ๊ฒƒ์€ UDP ๊ธฐ๋ฐ˜์˜ Point to Point๋ฅผ ์˜๋ฏธํ•˜์‹œ๋Š” ๊ฒƒ์ธ๊ฐ€์š”?


> ํ•œ ๋ฒˆ MulticastSocket ์„ ์ง์ ‘ ์‚ฌ์šฉํ•ด์„œ joinGroup ํ•ด์„œ ์ž˜ ๋˜๋Š”์ง€ ํ™•์ธํ•ด ์ฃผ์‹œ๊ฒ ์–ด์š”?

MulticastSocket์„ ์ง์ ‘ ์‚ฌ์šฉํ•ด์„œ joinGroup ํ•˜๊ณ  ์‹คํ–‰ ์‹œํ‚ค๋ฉด ์ž˜ ๋˜๋„ค์š”;;;
์ฐธ๊ณ ๋กœ ์ œ ์šด์˜์ฒด์ œ๋Š” ์œˆ๋„์šฐ XP์ด๊ณ  SP 3 ๊น”๋ฆฐ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

๊ท€์ฐฎ๊ฒŒ ํ•ด๋“œ๋ ค์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค;;;

Trustin Lee

unread,
Apr 22, 2009, 6:25:34โ€ฏAM4/22/09
to Netty Korean User Group
On 4์›”22์ผ, ์˜คํ›„7์‹œ14๋ถ„, penny <keuns...@gmail.com> wrote:
> ๋น ๋ฅธ ๋‹ต๋ณ€ ์ •๋ง ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
>
> ๊ทธ๋Ÿฐ๋ฐ, ๋‹ต๋ณ€ํ•˜์‹  ๋‚ด์šฉ ์ค‘์—์„œ์š”...
>
> > ๋„ค, ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ ์†Œ์ผ“ ํ•˜๋‚˜๋กœ ์—ฌ๋Ÿฌ ์›๊ฒฉ์ง€์—์„œ ํ•œ ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ํŒจํ‚ท์„ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ์†Œ์ผ“์„ ๋‹ซ์œผ๋ฉด
> > ์„œ๋ฒ„๋ฅผ ์ข…๋ฃŒ์‹œํ‚ค๋Š” ํšจ๊ณผ๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ์˜ˆ์™ธ๊ฐ€ ๋‚˜๋„ ์ฑ„๋„์„ ๋‹ซ์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
>
> ๋ผ๊ณ  ๋ง์”€ํ•˜์‹  ๋ถ€๋ถ„์ด ์žˆ๋Š”๋ฐ, ํ•œ ์›๊ฒฉ์ง€์—์„œ ๋ฉ€ํ‹ฐ ์บ์ŠคํŠธ๋กœ ๋ฟŒ๋ฆฌ๊ฑฐ๋‚˜ ํ•œ ์›๊ฒฉ์ง€์—์„œ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๋กœ ๋ฟŒ๋ฆฌ๋Š” ๊ฒฝ์šฐ์— ํ•ด๋‹น๋˜๋Š” ๋‚ด์šฉ์ธ
> ๊ฒƒ์ด์ง€์š”? ์ œ๊ฐ€ ํ•˜๋Š” ๋ถ€๋ถ„ ์ค‘์— ์›๊ฒฉ์ง€๋กœ๋ถ€ํ„ฐ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ๋กœ ๋ฐ›์•„์„œ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ๋กœ ๋ฟŒ๋ ค์•ผ ํ•˜๋Š” ๋ถ€๋ถ„๋„ ์žˆ๊ฑฐ๋“ ์š”..

๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๋ฅผ ๋ฐ›๋“  ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ๋ฅผ ๋ฐ›๋“  ์ž„์˜์˜ ์›๊ฒฉ์ง€๋กœ๋ถ€ํ„ฐ ๋ฐ›๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์ด์•ผ๊ธฐํ•œ ๊ฑฐ์—์š”^^

> > ๋‹ค๋งŒ ์ปค๋„ฅํŠธ๋œ DatagramChannel์˜ ๊ฒฝ์šฐ์—๋Š” ํ•˜๋‚˜์˜ ์›๊ฒฉ์ง€์—์„œ ํ•˜๋‚˜์˜ ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ํŒจํ‚ท๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๋‹ซ์•„๋„ ๋ฌด๋ฐฉํ•  ๋“ฏ ํ•˜๋„ค์š”.
>
> ์—ฌ๊ธฐ์—์„œ ์ปค๋„ฅํŠธ๋œ DatagramChannel์ด๋ผ๋Š” ๊ฒƒ์€ UDP ๊ธฐ๋ฐ˜์˜ Point to Point๋ฅผ ์˜๋ฏธํ•˜์‹œ๋Š” ๊ฒƒ์ธ๊ฐ€์š”?

๋„ต

> > ํ•œ ๋ฒˆ MulticastSocket ์„ ์ง์ ‘ ์‚ฌ์šฉํ•ด์„œ joinGroup ํ•ด์„œ ์ž˜ ๋˜๋Š”์ง€ ํ™•์ธํ•ด ์ฃผ์‹œ๊ฒ ์–ด์š”?
>
> MulticastSocket์„ ์ง์ ‘ ์‚ฌ์šฉํ•ด์„œ joinGroup ํ•˜๊ณ  ์‹คํ–‰ ์‹œํ‚ค๋ฉด ์ž˜ ๋˜๋„ค์š”;;;
> ์ฐธ๊ณ ๋กœ ์ œ ์šด์˜์ฒด์ œ๋Š” ์œˆ๋„์šฐ XP์ด๊ณ  SP 3 ๊น”๋ฆฐ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

ํ˜น์‹œ.. QOTM ์˜ˆ์ œ์—์„œ setBroadcast(false/true) ๋ผ์ธ๊ณผ ๊ด€๋ จ์ด ์žˆ์„์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด.. ํ•œ ๋ฒˆ ํ•ด๋‹น
๋ผ์ธ์„ ์ง€์šฐ๊ณ  ํ•ด ๋ณด๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

> ๊ท€์ฐฎ๊ฒŒ ํ•ด๋“œ๋ ค์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค;;;

์•„๋‹™๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๋” ๊ท€์ฐฎ๊ฒŒ ํ•ด ๋“œ๋ฆฌ๋Š” ๊ฒƒ ๊ฐ™๋„ค์š”. ๋ฌธ์ œ๋ฅผ ํ›„๋”ฑ ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์–ด์„œ์š” ^^

Trustin Lee

unread,
Apr 22, 2009, 6:28:10โ€ฏAM4/22/09
to Netty Korean User Group
์•„.. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด MulticastSocket ์ง์ ‘ ์‚ฌ์šฉํ•ด์„œ ์ž‘์„ฑํ•˜์‹  ์ฝ”๋“œ๋ฅผ ํšŒ์‹ ์— ๋„ฃ์–ด ์ฃผ์‹œ๋ฉด ๋™์ž‘์„ ๋น„๊ตํ•ด๋ณผ ์ˆ˜ ์žˆ
์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ถ€ํƒ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

penny

unread,
Apr 22, 2009, 6:59:21โ€ฏAM4/22/09
to Netty Korean User Group
setBroadcast(false/true) ๋ถ€๋ถ„์„ ์ œ์™ธ ํ–ˆ๋Š”๋ฐ๋„ ๋˜‘๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋„ค์š”;;

๋‹ค์Œ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ–ˆ๋˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

MulticastSocket์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ

public class TsdUserListener1 {

public static void main(String[] args) throws Exception {
int port = 20002;
String group = "239.0.0.3";

MulticastSocket s = new MulticastSocket(port);
s.joinGroup(InetAddress.getByName(group));
byte buf[] = new byte[18];
DatagramPacket pack = new DatagramPacket(buf, buf.length);
s.receive(pack);

System.out.println("Received data from: " + pack.getAddress
().toString() +
": " + pack.getPort() + " with length: " +
pack.getLength());
System.out.write(pack.getData(), 0, pack.getLength());
System.out.println();
}
}

Netty๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ

@ChannelPipelineCoverage("all")
public class TsdUserListener1 extends SimpleChannelHandler {

private static final String host = "239.0.0.3";
private static final int port = 20002;

@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent
e)
throws Exception {

e.getCause().printStackTrace();
e.getChannel().close();
}

@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent
e)
throws Exception {

ChannelBuffer buffer = (ChannelBuffer) e.getMessage();
ChannelBufferInputStream is = new ChannelBufferInputStream(buffer);

User user = new User();
user.setId(is.readInt());
user.setFirstName(buffer.toString(4, 4, "US-ASCII"));
user.setLastName(buffer.toString(8, 6, "US-ASCII"));
user.setHeight(is.readFloat());

System.out.println(user);
}

public static void main(String[] args) throws Exception {
DatagramChannelFactory factory = new OioDatagramChannelFactory(
Executors.newCachedThreadPool());

ChannelPipeline pipeline = Channels.pipeline();
pipeline.addLast("handler", new TsdUserListener1());

DatagramChannel channel = factory.newChannel(pipeline);
channel.joinGroup(InetAddress.getByName(host));

ChannelFuture future = channel.bind(new InetSocketAddress(port));
future.awaitUninterruptibly();
}

}

Netty ๊ธฐ๋ฐ˜ ์‹คํ–‰ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ stack trace

Exception in thread "main" org.jboss.netty.channel.ChannelException:
java.net.SocketException: error setting options
at org.jboss.netty.channel.socket.oio.OioDatagramChannel.joinGroup
(OioDatagramChannel.java:119)
at example.kntds.TsdUserListener1.main(TsdUserListener1.java:80)
Caused by: java.net.SocketException: error setting options
at java.net.PlainDatagramSocketImpl.join(Native Method)
at java.net.PlainDatagramSocketImpl.join(PlainDatagramSocketImpl.java:
172)
at java.net.MulticastSocket.joinGroup(MulticastSocket.java:276)๋‚˜๋Š” ์ƒํ™ฉ
๋„.... ๋Œ€๊ธฐ ์ค‘....

at org.jboss.netty.channel.socket.oio.OioDatagramChannel.joinGroup
(OioDatagramChannel.java:117)
... 1 more

at example.kntds.TsdUserListener1.main(TsdUserListener1.java:80) ์—ฌ๊ธฐ๊ฐ€ ๊ฐ€๋ฆฌ
ํ‚ค๋Š” ๋ผ์ธ์ด
channel.joinGroup(InetAddress.getByName(host)); ์ด ๋ถ€๋ถ„์ด์˜ˆ์š”;;

Trustin Lee

unread,
Apr 22, 2009, 7:04:05โ€ฏAM4/22/09
to Netty Korean User Group
MulticastSocket ์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ์—์„œ ์•„๋ž˜ ๋ถ€๋ถ„์„:

MulticastSocket s = new MulticastSocket(port);

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊พธ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค:

MulticastSocket s = new MulticastSocket(null);
s.bind(new InetSocketAddress(port));

๋˜ ์ด๋ ‡๊ฒŒ๋„ ๋ฐ”๊พธ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค:

MulticastSocket s= new MulticastSocket(new InetSocketAddress(port));

์ž˜ ๋ถ€ํƒํ•ฉ๋‹ˆ๋‹ค ^^

Trustin Lee

unread,
Apr 22, 2009, 7:09:56โ€ฏAM4/22/09
to Netty Korean User Group
์ง€๊ธˆ ๋ณด๋‹ˆ MulticastSocket ์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋Š” ์ƒ์„ฑ์ž์—์„œ bind๋ฅผ ๋จผ์ € ํ•˜๊ณ  joinGroup ์„ ํ•˜๋Š” ๋ฐ˜๋ฉด
Netty ๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋Š” joinGroup ์„ ๋จผ์ € ํ•˜๊ณ  ๊ทธ ๋‹ค์Œ์— bind ๋ฅผ ํ•œ๋‹ค๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋„ค์š”. Netty ๋ฅผ ์‚ฌ์šฉ
ํ•œ ์ฝ”๋“œ์—์„œ bind ๋ฅผ ๋จผ์ € ํ•œ ๋’ค์— joinGroup ํ•ด ๋ณด๋ฉด ์–ด๋–จ๊นŒ์š”?

penny

unread,
Apr 22, 2009, 7:13:47โ€ฏAM4/22/09
to Netty Korean User Group
On 4์›”22์ผ, ์˜คํ›„8์‹œ04๋ถ„, Trustin Lee <trus...@gmail.com> wrote:
> MulticastSocket ์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ์—์„œ ์•„๋ž˜ ๋ถ€๋ถ„์„:
>
> MulticastSocket s = new MulticastSocket(port);
>
> ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊พธ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค:
>
> MulticastSocket s = new MulticastSocket(null);
> s.bind(new InetSocketAddress(port));

์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

> ๋˜ ์ด๋ ‡๊ฒŒ๋„ ๋ฐ”๊พธ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค:
>
> MulticastSocket s= new MulticastSocket(new InetSocketAddress(port));
>
> ์ž˜ ๋ถ€ํƒํ•ฉ๋‹ˆ๋‹ค ^^

์ด ๊ฒฝ์šฐ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ์–ด์š”;;

Trustin Lee

unread,
Apr 22, 2009, 7:19:11โ€ฏAM4/22/09
to Netty Korean User Group
๋ฐ”๊ฟ” ๋งํ•˜๋ฉด MulticastSocket ์—์„œ new MulticastSocket(null) ๋กœ ๋ฐ”์ธ๋“œ ์•ˆ๋œ ์†Œ์ผ“์„ ๋งŒ๋“ ๋’ค
joinGroup ํ›„ bind ํ•ด์„œ ๋™์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค ^^;

penny

unread,
Apr 22, 2009, 7:29:04โ€ฏAM4/22/09
to Netty Korean User Group
> ์ง€๊ธˆ ๋ณด๋‹ˆ MulticastSocket ์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋Š” ์ƒ์„ฑ์ž์—์„œ bind๋ฅผ ๋จผ์ € ํ•˜๊ณ  joinGroup ์„ ํ•˜๋Š” ๋ฐ˜๋ฉด
> Netty ๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋Š” joinGroup ์„ ๋จผ์ € ํ•˜๊ณ  ๊ทธ ๋‹ค์Œ์— bind ๋ฅผ ํ•œ๋‹ค๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋„ค์š”. Netty ๋ฅผ ์‚ฌ์šฉ
> ํ•œ ์ฝ”๋“œ์—์„œ bind ๋ฅผ ๋จผ์ € ํ•œ ๋’ค์— joinGroup ํ•ด ๋ณด๋ฉด ์–ด๋–จ๊นŒ์š”?

์•„... ๊ทธ๋ ‡๊ฒŒ ํ•˜๋‹ˆ๊นŒ ๋˜์—ˆ์–ด์š”.
๊ทธ๋Ÿฐ ์ˆœ์„œ์˜ ์ฐจ์ด๊ฐ€ ์žˆ์œผ๋ฆฌ๋ผ๊ณ ๋Š” ์ •๋ง ์ƒ์ƒ๋„ ๋ชปํ–ˆ๋Š”๋ฐ, ์™œ ๊ทธ๊ฑธ ๋ชป ๋ณธ ๊ฒƒ์ธ์ง€;;;
์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค..^^

๋งˆ์ง€๋ง‰์œผ๋กœ ๋”ฑ ํ•˜๋‚˜์˜ ์งˆ๋ฌธ๊ณผ ๋„คํ‹ฐ์—๊ฒŒ ๋ฐ”๋ผ๋Š” ์  ํ•˜๋‚˜๋งŒ ์ ์„๊ป˜์š”^^

ChannelBuffer๋Š” ๋ณด๋‹ˆ๊น ์ด์ „ ์ž๋ฐ”์˜ ByteBuffer๋‚˜, ๋ฏธ๋‚˜์˜ ByteBuffer์—์„œ์ฒ˜๋Ÿผ putString์ด๋‚˜
putInt ๊ฐ™์€๊ฒƒ์ด ์—†๊ณ , ๋Œ€์‹  ChannelBufferOutputStream์ด๋‚˜ ChannelBufferInputStream
์„ ์‚ฌ์šฉํ•ด์„œ String ํƒ€์ž…์ด๋‚˜ float ํƒ€์ž…์„ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ, ์ด๋ ‡๊ฒŒ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์ด ๋งž๋Š”๊ฑด๊ฐ€์š”?

์Œ.. ๋„คํ‹ฐ์— ๋ฐ”๋ผ๋Š” ์ ์€ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ์˜ˆ์ œ, ์Šคํ”„๋ง๊ณผ์˜ ํ†ตํ•ฉ์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ์˜ˆ์ œํ•˜๊ณ  POJO๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์ผ๋ฐ˜์ ์ธ ์ž๋ฐ” ํƒ€์ž…๋“ค
์ด ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃจ์–ด์ ธ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ์•ฝ๊ฐ„ ๋ณด๊ฐ•๋˜์–ด์กŒ์œผ๋ฉด ํ•˜๋Š”๊ฑฐ์˜ˆ์š”^^

์„ฑ์‹คํ•˜๊ฒŒ ๋‹ต๋ณ€ํ•ด ์ฃผ์…”์„œ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.^^
๋‚˜์ค‘์— ๊ธฐํšŒ ๋˜๋ฉด ๋ฉ€ํ‹ฐ ์บ์ŠคํŠธ ์˜ˆ์ œ ๊ฐ„๋‹จํ•˜๊ฒŒ๋‚˜๋งˆ ๊ตฌ์„ฑํ•ด์„œ ์˜ฌ๋ ค๋ณด๋„๋ก ํ• ๊ป˜์š”^^

penny

unread,
Apr 22, 2009, 7:43:58โ€ฏAM4/22/09
to Netty Korean User Group
On 4์›”22์ผ, ์˜คํ›„8์‹œ19๋ถ„, Trustin Lee <trus...@gmail.com> wrote:
> ๋ฐ”๊ฟ” ๋งํ•˜๋ฉด MulticastSocket ์—์„œ new MulticastSocket(null) ๋กœ ๋ฐ”์ธ๋“œ ์•ˆ๋œ ์†Œ์ผ“์„ ๋งŒ๋“ ๋’ค
> joinGroup ํ›„ bind ํ•ด์„œ ๋™์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค ^^;
>

ํ•œ ๊ฐ€์ง€ ๋นผ ๋จน์—ˆ๋„ค์š”...
์ž๋ฐ”์˜ MulticastSocket์—์„œ๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๋‹ˆ๊นŒ ๋˜‘๊ฐ™์ด ์˜ต์…˜ ์„ค์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋„ค์š”.

๋ฐ”์ธ๋”ฉ ํ›„์— joinGroup์„ ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์•ˆ ๋‚ฌ์ง€๋งŒ...

MulticastSocket s = new MulticastSocket(null);
s.bind(new InetSocketAddress(port));

s.joinGroup(InetAddress.getByName(group));

๋ฐ”์ธ๋”ฉ ์ „์— joinGroup์„ ์ˆ˜ํ–‰ํ•˜๋‹ˆ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋„ค์š”.

MulticastSocket s = new MulticastSocket(null);

s.joinGroup(InetAddress.getByName(group));
s.bind(new InetSocketAddress(port));

Trustin Lee

unread,
Apr 22, 2009, 7:45:39โ€ฏAM4/22/09
to Netty Korean User Group
On Apr 22, 8:29 pm, penny <keuns...@gmail.com> wrote:
> > ์ง€๊ธˆ ๋ณด๋‹ˆ MulticastSocket ์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋Š” ์ƒ์„ฑ์ž์—์„œ bind๋ฅผ ๋จผ์ € ํ•˜๊ณ  joinGroup ์„ ํ•˜๋Š” ๋ฐ˜๋ฉด
> > Netty ๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋Š” joinGroup ์„ ๋จผ์ € ํ•˜๊ณ  ๊ทธ ๋‹ค์Œ์— bind ๋ฅผ ํ•œ๋‹ค๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋„ค์š”. Netty ๋ฅผ ์‚ฌ์šฉ
> > ํ•œ ์ฝ”๋“œ์—์„œ bind ๋ฅผ ๋จผ์ € ํ•œ ๋’ค์— joinGroup ํ•ด ๋ณด๋ฉด ์–ด๋–จ๊นŒ์š”?
>
> ์•„... ๊ทธ๋ ‡๊ฒŒ ํ•˜๋‹ˆ๊นŒ ๋˜์—ˆ์–ด์š”.
> ๊ทธ๋Ÿฐ ์ˆœ์„œ์˜ ์ฐจ์ด๊ฐ€ ์žˆ์œผ๋ฆฌ๋ผ๊ณ ๋Š” ์ •๋ง ์ƒ์ƒ๋„ ๋ชปํ–ˆ๋Š”๋ฐ, ์™œ ๊ทธ๊ฑธ ๋ชป ๋ณธ ๊ฒƒ์ธ์ง€;;;
> ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค..^^

๊ทธ๋Ÿฌ๊ฒŒ ๋ง์ด์—์š”. ๊ทธ๋Ÿฐ๋ฐ VMware ์—์„œ Windows Vista ๋กœ ํ…Œ์ŠคํŠธํ•ด ๋ณด๋ฉด ์ˆœ์„œ์— ๊ด€๊ณ„ ์—†์ด ์ž˜ ๋˜๋Š” ๊ฒƒ ๊ฐ™์•„
์š”. ์šด์˜์ฒด์ œ๋งˆ๋‹ค ์กฐ๊ธˆ์”ฉ ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋„ค์š”.

> ๋งˆ์ง€๋ง‰์œผ๋กœ ๋”ฑ ํ•˜๋‚˜์˜ ์งˆ๋ฌธ๊ณผ ๋„คํ‹ฐ์—๊ฒŒ ๋ฐ”๋ผ๋Š” ์  ํ•˜๋‚˜๋งŒ ์ ์„๊ป˜์š”^^
>
> ChannelBuffer๋Š” ๋ณด๋‹ˆ๊น ์ด์ „ ์ž๋ฐ”์˜ ByteBuffer๋‚˜, ๋ฏธ๋‚˜์˜ ByteBuffer์—์„œ์ฒ˜๋Ÿผ putString์ด๋‚˜
> putInt ๊ฐ™์€๊ฒƒ์ด ์—†๊ณ , ๋Œ€์‹  ChannelBufferOutputStream์ด๋‚˜ ChannelBufferInputStream
> ์„ ์‚ฌ์šฉํ•ด์„œ String ํƒ€์ž…์ด๋‚˜ float ํƒ€์ž…์„ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ, ์ด๋ ‡๊ฒŒ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์ด ๋งž๋Š”๊ฑด๊ฐ€์š”?

ChannelBuffers.copiedBuffer(String str, String encoding) ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ฒ„ํผ๋กœ
๋ณ€ํ™˜์ด ๋˜๊ณ , ๊ทธ ๋ฒ„ํผ๋ฅผ ์ธ์ˆ˜๋กœ ์ฃผ๊ณ  writeBytes() ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค:

buf.writeBytes(ChannelBuffers.copiedBuffer("์•ˆ๋…•ํ•˜์„ธ์š”", "UTF-8"));

> ์Œ.. ๋„คํ‹ฐ์— ๋ฐ”๋ผ๋Š” ์ ์€ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ์˜ˆ์ œ, ์Šคํ”„๋ง๊ณผ์˜ ํ†ตํ•ฉ์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ์˜ˆ์ œํ•˜๊ณ  POJO๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์ผ๋ฐ˜์ ์ธ ์ž๋ฐ” ํƒ€์ž…๋“ค
> ์ด ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃจ์–ด์ ธ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ์•ฝ๊ฐ„ ๋ณด๊ฐ•๋˜์–ด์กŒ์œผ๋ฉด ํ•˜๋Š”๊ฑฐ์˜ˆ์š”^^

๋ง์”€ํ•ด ์ฃผ์‹  ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ์ง€์†์ ์ธ ๋ฌธ์„œํ™”๋กœ ํ•ด๊ฒฐํ•ด์•ผ ๊ฒ ๋„ค์š”. ๊ด€๋ จํ•ด์„œ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ… ํ•˜์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค ^^;

> ์„ฑ์‹คํ•˜๊ฒŒ ๋‹ต๋ณ€ํ•ด ์ฃผ์…”์„œ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.^^
> ๋‚˜์ค‘์— ๊ธฐํšŒ ๋˜๋ฉด ๋ฉ€ํ‹ฐ ์บ์ŠคํŠธ ์˜ˆ์ œ ๊ฐ„๋‹จํ•˜๊ฒŒ๋‚˜๋งˆ ๊ตฌ์„ฑํ•ด์„œ ์˜ฌ๋ ค๋ณด๋„๋ก ํ• ๊ป˜์š”^^

์ €์•ผ๋ง๋กœ ๋•ํƒ์— ํ•œ ๊ฐ€์ง€ ๋ฐฐ์šฐ๊ฒŒ ๋˜์—ˆ๋„ค์š”. ์•ž์œผ๋กœ๋„ ๋งŽ์€ ๋ฌธ์˜ ๋ฐ ๋ฒ„๊ทธ ๋ณด๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค^^

์ดํฌ์Šน ๋“œ๋ฆผ

Trustin Lee

unread,
Apr 22, 2009, 7:54:38โ€ฏAM4/22/09
to Netty Korean User Group
2009/4/22 Trustin Lee <tru...@gmail.com>:

> On Apr 22, 8:29 pm, penny <keuns...@gmail.com> wrote:
>> ChannelBuffer๋Š” ๋ณด๋‹ˆ๊น ์ด์ „ ์ž๋ฐ”์˜ ByteBuffer๋‚˜, ๋ฏธ๋‚˜์˜ ByteBuffer์—์„œ์ฒ˜๋Ÿผ putString์ด๋‚˜
>> putInt ๊ฐ™์€๊ฒƒ์ด ์—†๊ณ , ๋Œ€์‹  ChannelBufferOutputStream์ด๋‚˜ ChannelBufferInputStream
>> ์„ ์‚ฌ์šฉํ•ด์„œ String ํƒ€์ž…์ด๋‚˜ float ํƒ€์ž…์„ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ, ์ด๋ ‡๊ฒŒ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์ด ๋งž๋Š”๊ฑด๊ฐ€์š”?
>
> ChannelBuffers.copiedBuffer(String str, String encoding) ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ฒ„ํผ๋กœ
> ๋ณ€ํ™˜์ด ๋˜๊ณ , ๊ทธ ๋ฒ„ํผ๋ฅผ ์ธ์ˆ˜๋กœ ์ฃผ๊ณ  writeBytes() ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค:
>
> buf.writeBytes(ChannelBuffers.copiedBuffer("์•ˆ๋…•ํ•˜์„ธ์š”", "UTF-8"));

๋‹ต๋ณ€์ด ํ•˜๋‚˜ ๋น ์กŒ๋„ค์š”;

float ๋‚˜ double ์˜ ๊ฒฝ์šฐ์—๋Š” Float.floatToIntBits() ๋‚˜
Double.doubleToLongBits() ๋กœ ๋ณ€ํ™˜ ํ›„ writeInt ๋‚˜ writeLong ์„ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ดํฌ์Šน ๋“œ๋ฆผ

Reply all
Reply to author
Forward
0 new messages