Windows API๋กœ ์‹œ์ž‘ํ•ด๋ณด๋Š” ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๋ฐ˜์‘ํ˜•

์•„์ง ์†Œ์ผ“์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ๋ชจ๋ฅด์‹œ๊ฒ ๋‹ค๊ตฌ์š”?

์•„๋ž˜์˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ Socket ํฌ์ŠคํŠธ๋ฅผ ๋ฏธ๋ฆฌ ์ฝ์–ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.


๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ์ดˆ - Socket


์•ˆ๋…•ํ•˜์„ธ์š”. ์—ฌ๊ธฐ๋Š” Windows ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค. ์œ„ Socket์˜ ๊ฐœ๋… ํฌ์ŠคํŠธ์™€ ๋”๋ถˆ์–ด, Windows API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— Windows API์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๊ฐ™์ด ์ •ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜์…จ๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ณ , ๊ธ€์„ ์จ ๋‚˜๊ฐ€๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


WinSock2

Windows Socket์€ BSD Unix ํ˜ธํ™˜์„ ์œ„ํ•ด ๊ทธ ๊ฐœ๋…์€ ๊ต‰์žฅํžˆ ๋น„์Šทํ•˜์ง€๋งŒ, Windows ์šด์˜์ฒด์ œ์— ๋งž์ถฐ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜, ์†Œ์ผ“์€ ํŠน์„ฑ์ƒ ์ปค๋„์— ์š”์ฒญํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์—, ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ์œ ๋‹‰์Šค์™€ ๋‹ฌ๋ฆฌ Windows ์—์„œ๋Š” ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์ด ์กฐ๊ธˆ ๊นŒ๋‹ค๋กœ์šธ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.


์œ ๋‹‰์Šค์—์„œ ์†Œ์ผ“์€ ํŒŒ์ผ๋กœ ๋‹ค๋ฃจ๊ณ , ๊ทธ์— ๊ด€ํ•œ ํ•จ์ˆ˜๋Š” signed int ํ˜•์˜ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ ํŒŒ์ผ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์œˆ๋„์šฐ๋Š” ์œ ๋‹‰์Šค์™€ ๋‹ฌ๋ฆฌ ํŒŒ์ผ์ด ์•„๋‹Œ ์ œ๊ฐ€ ์ ์€ Windows API ๊ธฐ๋ณธ ๋ฌธ์„œ์—๋„ ์ ํ˜€์žˆ๋“ฏ์ด Kernel Object, ์ฆ‰ ์ปค๋„ ๊ฐ์ฒด๋กœ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค. ์ด๋“ค ๊ฐ์ฒด๋Š” ์œ ๋‹‰์Šค์ฒ˜๋Ÿผ signed int ํ˜•ํƒœ์˜ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๊ฐ€ ์•„๋‹Œ, HANDLE์„ ์ด์šฉํ•ด ์ œ์–ดํ•œ๋‹ค๋Š” ์ ์„ ์•Œ๊ณ  ๊ณ„์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.


ํ•˜์ง€๋งŒ WinSock2๋Š” BSD Unix Socket์ด signed int ํ˜•ํƒœ๋ฅผ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผ๊ฐ€๊ณ ์ž(ํ˜ธํ™˜์„ ์œ„ํ•ด) unsigned int ํ˜•ํƒœ์˜ ์žฌ์ •์˜ํ•œ ์†Œ์ผ“ ๋””์Šคํฌ๋ฆฝํ„ฐ๋กœ ์†Œ์ผ“์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ๊ฒฐ๋ก ์€ Unix Socket๊ณผ๋Š” ๋งŽ์ด ์ฐจ์ด๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ด์ง€์š”. ๊ฒฐ๊ตญ ๋‹ค๋ฅธ Kernel Object์™€ ๋‹ฌ๋ฆฌ Socket์„ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ์ธ์‹ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.




๊ทธ๋ ‡๋‹ค๋ฉด, Unix์™€์˜ ์ด์‹์„ฑ์„ ๊ณ ๋ คํ•ด signed int๋ฅผ ์จ๋„ ๋ฌด๋ฐฉํ•˜๋‹ค๋Š” ์–˜๊ธฐ๊ฒ ์ง€์š”? ๋ฌผ๋ก  ๊ทธ๋ ‡์ง€๋งŒ, Visual C++ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ๋Š” ์ผ๋ถ€ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ์ฐธ๊ณ ํ•˜์‹œ๊ณ  ์ฝ”๋”ฉํ•˜์‹œ๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค ^^;



์œ„ ์ด๋ฏธ์ง€๋Š” ์‹ค์ œ Visual Studio์—์„œ SOCKET ์ง€์ •์ž๊ฐ€ ๋‚˜ํƒ€๋‚ด๋Š” ์ž๋ฃŒํ˜•์„ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ unsigned int ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ฝ”๋”ฉ์„ ํ•ด ๋ณธ ๊ฒฐ๊ณผ, signed int ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค๋Š” ์ ์€ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 



WinSock ์ƒ์„ฑ ์ค€๋น„

Windows Socket๋„ ์œ ๋‹‰์Šค ์†Œ์ผ“๊ณผ ๊ฐ™์ด ํ•„์š”ํ•œ ์š”์†Œ๊ฐ€ ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ ํ˜ธ์ŠคํŠธ์—๋Š” ํ˜ธ์ŠคํŠธ๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ์‹๋ณ„์ž์ธ IP ์ฃผ์†Œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•œ ํ˜ธ์ŠคํŠธ์—๋Š” ์—ฌ๋Ÿฌ ๋„คํŠธ์›Œํฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ฃ . ๊ทธ๋Ÿผ ํ•œ ํ˜ธ์ŠคํŠธ์—์„œ ์—ฌ๋Ÿฌ ๋„คํŠธ์›Œํฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹๋ณ„์ž ๋˜ํ•œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ์—์„œ๋Š” ์ด๋ฅผ PID(ํ”„๋กœ์„ธ์Šค ์‹๋ณ„์žID)๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ, ๋„คํŠธ์›Œํฌ์—์„œ๋Š” ์ด๋ฅผ PID๋กœ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ , ํฌํŠธ ๋ฒˆํ˜ธ๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.


ํฌํŠธ๋ฒˆํ˜ธ๋Š” TCP/UDP ํŒจํ‚ท์— 16bit ํ˜•ํƒœ๋กœ ๊ฐ™์ด ์ €์žฅ๋˜์–ด ์ „์†กํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 1 ~ 65535๋ฒˆ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , TCP์™€ UDP๊ฐ€ ๊ฐ๊ฐ ๊ฐ™์€ ๋ฒˆํ˜ธ๋กœ ๋™์ž‘ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์–˜๊ธฐ๋Š” ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ TCP์™€ UDP๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด์•ผ๊ธฐ์ง€์š”.


์ž ๊ทธ๋Ÿผ ์ด์ œ ์†Œ์ผ“์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ฒƒ์„ ์ „์ฒด์ ์œผ๋กœ ๋ณด์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.


- ํ†ต์‹ ์— ์‚ฌ์šฉํ•  ํ”„๋กœํ† ์ฝœ (TCP, UDP)

- ํด๋ผ์ด์–ธํŠธ IP ์ฃผ์†Œ

- ํด๋ผ์ด์–ธํŠธ ํฌํŠธ ๋ฒˆํ˜ธ

- ์„œ๋ฒ„ IP ์ฃผ์†Œ

- ์„œ๋ฒ„ ํฌํŠธ ๋ฒˆํ˜ธ


์œ ๋‹‰์Šค ์†Œ์ผ“๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์‹ค์ œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•  ๋•Œ๋Š” ํด๋ผ์ด์–ธํŠธ IP ์ฃผ์†Œ์™€ ํฌํŠธ ๋ฒˆํ˜ธ๋Š” ์ฝ”๋“œ์— ์ ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์šด์˜์ฒด์ œ์—์„œ ์ง์ ‘ ํฌํŠธ ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•˜๊ณ , IP ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์œ ๋‹‰์Šค์™€ ์œˆ๋„์šฐ ๋ชจ๋‘ ๋˜‘๊ฐ™์ด ์ ์šฉ๋˜๋Š” ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.



WinSock ์ƒ์„ฑ

์ด์ œ ์†Œ์ผ“์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ค€๋น„๋ฌผ์€ ๋ชจ๋‘ ๊ฐ–์ถฐ์กŒ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด์ œ ์†Œ์ผ“์„ ์–ด๋–ป๊ฒŒ ๋งŒ๋“œ๋Š”์ง€๋งŒ ์•Œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ด์ œ ์‹œ์ž‘ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๋ ค๋ฉด, ๋‘ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ, ๋˜ ํ•˜๋‚˜๋Š” ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ๋‘˜์ด ์„œ๋กœ ํ†ต์‹ ์„ ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ํ”„๋กœ๊ทธ๋žจ ๋ชจ๋‘ ์†Œ์ผ“์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 


๋˜, Windows Socket์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ดˆ๊ธฐ์— winsock.dll ์ด๋ผ๋Š” ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ ๋” ์ด์ƒ Windows Socket์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ์†Œ๋ฉธํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ, ๋‹จ์ˆœํžˆ Socket์„ closeํ•  ๋ฟ ์•„๋‹ˆ๋ผ, Windows Socket Library๋ฅผ Cleanup ํ•ด์ฃผ๋Š” ์ž‘์—…๊นŒ์ง€ ๋ชจ๋‘ ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๋จผ์ € Visual Studio๋ฅผ ์—ด๊ณ , ํ”„๋กœ์ ํŠธ ์†์„ฑ์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.



๋ง์ปค๋กœ ๋“ค์–ด๊ฐ€์‹œ๊ฒŒ ๋˜๋ฉด, ์ž…๋ ฅ ๋ฉ”๋‰ด๊ฐ€ ๋ณด์ด์‹ญ๋‹ˆ๋‹ค. ์ž…๋ ฅ ๋ฉ”๋‰ด์—๋Š” ์˜์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋‰ด๊ฐ€ ๋งจ ์ฒซ ๋ถ€๋ถ„์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.



ws2_sock.lib ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.


์ž ์ด์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


argument๋Š” ์ด 3๊ฐœ๋ฅผ ๋‹ด์•˜๊ณ , WSAStartup ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ws2_sock.lib ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Unix Socket์—์„œ๋Š” ์ด๋Ÿฐ ์ž‘์—… ๊ณผ์ •์ด ํ•„์š”์—†์ง€๋งŒ, Windows ์—์„œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ, ์œ„ ํ•จ์ˆ˜๋ฅผ ๋™๋ฐ˜์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


์ด ์ฝ”๋“œ๋Š” ์œ ๋‹ˆ์ฝ”๋“œ์™€์˜ ํ˜ธํ™˜์„ ์œ„ํ•ด t ๊ณ„์—ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
๋งŒ์•ฝ, ๋ฉ€ํ‹ฐ๋ฐ”์ดํŠธ(ASCII) ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ, cstdio ํ—ค๋” ํŒŒ์ผ์„ include ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.


Windows Socket์„ ์ƒ์„ฑํ•  ๋–„๋„, Unix Socket๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ socket() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. WinSock2.h ํ—ค๋” ํŒŒ์ผ๋งŒ includeํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ฒซ ์ธ์ž์ธ PF_INET์€ ์„œ๋น„์Šค ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœํ† ์ฝœ ์ฒด๊ณ„๋กœ ์ธํ„ฐ๋„ท์„ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์ด์•ผ๊ธฐ์ด๋ฉฐ ๋ณดํ†ต IPv4 ์ฒด๊ณ„๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. IPv6๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•  ๊ฒฝ์šฐ, PF_INET6 ๋งคํฌ๋กœ ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


๋˜, ์œ ๋‹‰์Šค ์†Œ์ผ“์—์„œ๋Š” ๋งˆ์ง€๋ง‰ ์ธ์ž๊ฐ€ ๋‘ ๋ฒˆ์งธ ์ธ์ž๊ฐ’์— ๋”ฐ๋ผ SOCK_STREAM ๋งคํฌ๋กœ ์ƒ์ˆ˜์ด๋ฉด, 0์„ ์จ๋„ ๋ฌด๊ด€ํ–ˆ์ง€๋งŒ Windows Socket์—์„œ๋Š” IPPROTO_TCP ๋งคํฌ๋กœ ์ƒ์ˆ˜๋ฅผ ๋ณ„๋„๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋„ฃ์–ด์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.


sockaddr_in ๊ตฌ์กฐ์ฒด๋Š” 3๊ฐœ์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. sin_family๋Š” ์šฐ๋ฆฌ๊ฐ€ ์œ„์—์„œ ๋งŒ๋“  ์†Œ์ผ“์— ๋Œ€ํ•œ ์ฃผ์†Œ ์ฒด๊ณ„์ž…๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€๋Š” ํฌํŠธ๋ฒˆํ˜ธ์™€ IP ์ฃผ์†Œ์ธ๋ฐ, ์—ฌ๊ธฐ์„œ ์ €๋Š” IP ์ฃผ์†Œ๋ฅผ ๋”ฐ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ , ์šด์˜์ฒด์ œ์—์„œ ์ฃผ์–ด์ง„ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด INADDR_ANY๋ผ ํ•˜๋Š” ๋ฏธ๋ฆฌ ์ •์˜๋œ ๋งคํฌ๋กœ ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค




WinSock2 ํ†ต์‹  ์ ˆ์ฐจ
์œ ๋‹‰์Šค ์†Œ์ผ“๊ณผ ๋‹ฌ๋ฆฌ, ์œˆ๋„์šฐ ์†Œ์ผ“์€ ์ปค๋„ ๊ฐ์ฒด์˜ ์š”์†Œ๋กœ ๋™์ž‘ํ•˜์ง€๋งŒ, ์œ ๋‹‰์Šค์™€์˜ ํ˜ธํ™˜์„ ์œ„ํ•ด ํŒŒ์ผ๋กœ ๋‹ค๋ค„์ง„๋‹ค๋Š” ์ ์„ ์•Œ์•˜์œผ๋ฉฐ, ์ด์‹์„ฑ์„ ์œ„ํ•ด unsigned int๋กœ ์žฌ์ •์˜ํ•œ ๊ฒƒ์„ signed int ํ˜•์œผ๋กœ ์‚ฌ์šฉํ•ด๋„ ๋ฌด๊ด€ํ•˜๋‹ค๋Š” ์ ๋„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ํ˜ธํ™˜์„ฑ๊ณผ ๋˜‘๊ฐ™์ด ์œˆ๋„์šฐ ์†Œ์ผ“๋„ ํ†ต์‹  ์ ˆ์ฐจ๋Š” ์œ ๋‹‰์Šค ์†Œ์ผ“๊ณผ 100% ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์„œ socket() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์†Œ์ผ“ ํ•จ์ˆ˜ ์ƒ์„ฑ๊นŒ์ง€๋Š” ๋งˆ์ณค์œผ๋‹ˆ ๊ทธ ๋‹ค์Œ ๊ณผ์ •์œผ๋กœ ์ง„ํ–‰ํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋žจ ์ค‘ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์ด ์™„์„ฑ๋ฉ๋‹ˆ๋‹ค. Let's Coding !


์†Œ์ผ“๋ฒˆํ˜ธ์™€ ์†Œ์ผ“์ฃผ์†Œ๋ฅผ ๋ฌถ์–ด๋†“๊ธฐ ์œ„ํ•ด, ์†Œ์ผ“๋ฒˆํ˜ธ๋ฅผ ์ฒซ ๋ฒˆ์จฐ ์ธ์ž๊ฐ’์œผ๋กœ ์ฃผ๊ณ , ์ธํ„ฐ๋„ท ์†Œ์ผ“ ์ฃผ์†Œ๋Š” ๊ตฌ์กฐ์ฒด์ด๋ฏ€๋กœ ํฌ์ธํ„ฐ๋กœ ๋„˜๊น๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์†Œ์ผ“ ์ฃผ์†Œ ๊ตฌ์กฐ์ฒด์˜ ํฌ๊ธฐ๊นŒ์ง€ ๋„ฃ์–ด์ฃผ๋ฉด bind๊ฐ€ ์™„์„ฑ๋ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋Š” ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค


bind ํ•จ์ˆ˜๊นŒ์ง€ ๋งˆ์ณค์œผ๋ฉด, ์ด์ œ ๋ชจ๋“  ์ค€๋น„๊ฐ€ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์ด์ œ listen ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๋Œ€๊ธฐ๋ชจ๋“œ๋กœ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ๋Œ€๊ธฐ๋ชจ๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹ ํ˜ธ๋ฅผ ์ค„ ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ•จ์ˆ˜๋กœ, ๋งˆ์น˜ ์†๋‹˜์ด ์˜ค๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. listen ํ•จ์ˆ˜์—์„œ ๋งˆ์ง€๋ง‰ ์ธ์ž ๊ฐ’์€ ๋™์‹œ ์ ‘์† ํ—ˆ์šฉ ํด๋ผ์ด์–ธํŠธ ์ˆ˜์ž…๋‹ˆ๋‹ค.


ํด๋ผ์ด์–ธํŠธ์™€ ์—ฐ๊ฒฐ์— ์„ฑ๊ณตํ•˜๋ฉด, ์„œ๋ฒ„๋Š” accept() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ์™€ ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์†Œ์ผ“์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ณ ๋กœ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์—๋Š” 2๊ฐœ์˜ ์†Œ์ผ“์ด ํ•„์š”ํ•œ ๊ฒƒ์ด์ฃ . Listen์„ ์œ„ํ•œ ์†Œ์ผ“๊ณผ ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ์„ ๋ฐ›๊ธฐ ์œ„ํ•œ Accept ์†Œ์ผ“.


accept ์†Œ์ผ“์€ ํด๋ผ์ด์–ธํŠธ์™€ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•œ ์—ฐ๊ฒฐ ๊ณ ๋ฆฌ๋กœ, listen socket์€ ๊ณ„์† ๋‹ค์Œ ์—ฐ๊ฒฐ์„ ๋ฐ›๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.


Windows์—์„œ๋„ ๋ฌธ์ œ ์—†์ด ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์„ฑ๊ณตํ•˜์˜€์Šต๋‹ˆ๋‹ค!


์˜ค์ž‰? ์–ด๋Š์ƒˆ ๋ณด๋‹ˆ, Windows์—์„œ๋„ grep ์ปค๋งจ๋“œ๋ฅผ ์ง€์›ํ•˜๋Š”๊ตฐ์š”. Good !


๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ†ต์‹  ์ ˆ์ฐจ์— ๋”ฐ๋ผ ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ๋„ ์ฝ”๋”ฉํ•ด๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.



๋งˆ์น˜๋ฉฐ.....

์—ฌ๊ธฐ๊นŒ์ง€ ์œˆ๋„์šฐ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž‘์„ฑ๋„ ๋งˆ๋ฌด๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๋ž˜๋„ ์ €๋Š” Windows์™€๋Š” ์ž˜ ์•ˆ๋งž๋Š” ๋“ฏ ใ„ฑ-; ๋ฆฌ๋ˆ…์Šค์™€ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋‹ˆ, ์—ฌ๋Ÿฌ๋ชจ๋กœ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ถ€๋ถ„๋„ ์žˆ๊ณ , Windows ๋งŒ์˜ ์ปค๋„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์ด ๋˜ ๋ณ„๋„๋กœ ์กด์žฌํ•ด์„œ, ์—ฌ๋Ÿฌ๋ชจ๋กœ ์ฝ”๋”ฉํ•  ๋•Œ ๋งŽ์ด ๊นŒ๋‹ค๋กœ์šด ์ ์ด ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค.


ํŠนํžˆ Visual C++๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์œ ๋‹ˆ์ฝ”๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์‹ฌ์—ฌ๋ฅผ ๊ธฐ์šธ์—ฌ์„œ ํ•œ ํŽธ์ธ๋ฐ, ์ด๋ฒˆ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ argument๋ฅผ ์œ ๋‹ˆ์ฝ”๋“œ๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด ์•ฝ๊ฐ„์˜ ๊ฐ€๋ผ๋ฅผ ์กฐ๊ธˆ ์ด์šฉํ–ˆ์Šต๋‹ˆ๋‹ค๋งŒ, ๋‹ค์Œ ์ฝ”๋”ฉํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๋ฒ•์„ ์ฐพ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ^^;


์—ฌ๊ธฐ๊นŒ์ง€ ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ์ดˆ์˜€์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments