ù Ϸ..
ؾ?
API ִ Լ ִ°ǰ?
.. DPLAY ˾Ҵµ..
http://www.sockets.com ð
н Ʈũ α Howto Ŀ
н α FAQ, TCP/IP FAQ ã ñ ٶϴ.ȭ (soaring
)
ڷḦ ̰ ýϴ.
.. ִ ȭϵ Ǵ..
..
ڽϴ.. ==;
DPlay .. TCP/IP,IPX... ̵ ϴµ..
̰ ص ̸ θ.. ==;
ϴ°ǵ..
winsock̶ ִ°ǰ? ^^;
뷫 .. ó ؾ ϴ
亯 Ź 帳ϴ..
.. ó.. ϱ.. ÷ ϴ°
ؾѴ.. Լ̸ ( .. )
Ź 帳ϴ.
´ٸ, Ѵٰ ˴ϴ.
ϸ.. ؼ ΰ ϴ ̶
˴ϴ. ϱ, " Ƽ ǵ?" °Ŷ .
װ
ǥ ˷ִ .
, ϸ ϴ. ̰ ִٸ,
ŸũƮ ƺδ TCP/IP ּҸ Էϴ° ƴ϶ ׳
Ʋݿ . װŴ ̹ Ʋ ̹ Ǿ ֱ ,
ּ Է ִ .
IPX ȹ? ´ , IPX Ϳ?
Ʈ̿? ư LAN ʴ ؿ ó˴ϴ. Ȯ
, LAN ִ Ǹ .
..ص ǰ? ȭ,̺ ״ϱ. ȭ̾
ȭȣ ױ.. :)
켱,ٸ ư 캸ô° ͱ.
IPX ַ LAN ȭϰ .
뺧Ʈ ⺻ Դϴ.
( IBM ߴ ̴ϴ. ߱ ȳ.)
TCP/IP н ߴ߱
.. ȯ ǥ ϰ
WANȯ濡 ߵư. ͳ TCP/IP ϰ
ְ ΰ ü TCP/IP ϰ ִ°.
TCP/IP IPּ ̶ IPּҸ κ TCP/IPۿ ű.
IPXü LAN̶ Ը Ʈ IPּҸ
. ( IPX Ҷ ּҸ ȳ.)
Ʈ ͳ 긴 IPX ִ
ֽϴ. (IPX Ѵٱ TCP/IP̿
) 뼱 ȸ縶 Ͱ .
IPX ϳ (Ʈ ) ϱ.
浵 IPXδ ϳ 泻 ִ°.
kali ƮŬ̾Ʈ ִ ҵ IPX TCP/IP Ʈ
ִ ̴ϴ.
IPX ̿ ص ܺθ kaliŬ̾Ʈ
TCP/IP IPX ؼ ٲִ ֱ
ܺο͵ IPX ִ .
Direct play ̷ ݿ 8 ϰ ִ
̷ Ŭ Դϴ.
Direct play ߽ᵵ ̳ IPX 8 ϴ
.
(Netview ϱ PPP/Slip , ø ̺ ᵵ մϴ.)
Socket TCP/IP α α ⺻ Դϴ.
Ʈ ϸ Ǵµ.
Ʈ ŵ ϱ ؼ İ
ε Ǿ ־ մϴ. δ Ǿ
ְ ͻδ Ǿ ִٰ ǥ մϴ.
̶° ̰ ľ߸
İ Ǿٰ ϴµ ̰ ҹٴ ƴϰ.
(̷ TCP/IP Illustrated Vol1 Ͻʽÿ.
αҶ Ⱦ Ѵٴ 鿡 .)
ư ̰ Ȱ İ ȯ غ
Ȱ̰ 츰 ̿Ͽ ְ ִٴ
߿.
DZ ؼ 켱 ϰϴ IPּҿ portȣ ˾
մϴ. Port ϳ ǻͿ ϱ ȣ
Դϴ. 1~65535 ο ǰ ʹ ⺻ Ҵ
Ǿ ֽϴ. port ȣ Ϸ ȣ ְ
ϴ ΰ DZ մϴ. ̷ Ʈ ϴµ.
츮 ϴ 80 Ʈ . 츮
ϴ Ŀ IPּҳ ּҸ.
Ҷ ipּ 80 Ʈ
˴ϴ. Ư Ʈ ȣ ֽϴ.
ʹ ұ. Ҹ . ư Ʈ غ
ִ κ. TCP϶ ϳ Ʈ Ŭ̾Ʈ
ɱ?
װ Դϴ ^^; ణ ڷ ã . ( ƴ. ^^;
հ ļ..)
ư TCP/IP Ʈ α ϱ ϱ
̶ ϸ ˴ϴ. WinSock 쿡
̱.
α ϱ ؼ TCP/UDP Ʈ
Ʈ ? ˰ ־ API ¥ ˴ϴ.
ñϽø Ʈ 伭 Ǹ ø ذ ɰ̴ϴ.
..
̱ ȴٸ .. (isoft )
Unix α...
ȳϼ...
Stevens å ...
ظ װ ذ Ͻ Ű...
ٰ ؼ
带 ϴ ƴմϴ.
Unix
뿡 ؾ ̰...
پ ְ...
뵵 Ǵ ؿ ؾ߰...
ϰ ʴٸ one processε մϴ.
multi process ص ̰...
ϰ IPC ϴ ͵ ū ˴ϴ.
Unix (?) α ...
ϰ ִµ...
ʿϰ մϴ.
带 Ͻ÷ ٸϴ.
Ϸ
̰͵ ؾ ̰...
Unix Ư ôٸ
One server ô մϴ.
loop time ֳĿ ǰ...
ó ð ּ ٿ ϰ...
Unix IPC Ǵϱ...
Ʈ Ҳϴ.
α ߰ ...
Stevens Advenced Unix Programming ø
ǰſ.
ڷ Linux ȣȸ ø ֽϴ.
gcc Ͻô е ɰ̴ϴ.
ڵ Ѱ ʿϽø...
ӵ ҽ ѹ ô ͵ ɵ ϳ...
ϱ ʹ ٸ...
ü 뿡 ɰ̴ϴ.
ȫ (kingduke)
TCP/IP ΰ?
ƺη ؼ UDP/IP ˷ Դϴ.
ƺ п ִ° ϱ.
PC ϴ α Ÿ
äũϴ κ ϴ.
Error correction Ƿ ¥ֵ ϴ°.
TCP/IP 99% ٰ ϰ α
¥ ɰ ϴ.
ణ Ȯ äũ ٴ ¿.
ӵ ִ Ȳ غ
TCP/IP ٴ° ʴٴ .
ӵ ϴ ӿ UDP/IP ° ִµ
ƺε . ..ռȣ (mouse )
throattling
, 28k ߴٰ սô.
´µ,ʿ װ ¹ġ
ٳ.. װ ذϱ ؼ ʿ 'õõ'
ִ° ٴ±. ̸ throattling̶µ..װ ʿ
ñմϴ. ʹ ϴ ť ȴٰ ˰ ִµ..
ɸ
ʹ 亯 ...
ť full ǰ data overflow ǰ...
Ȳ ť ۿ ϳ ...
κ data ҸǾ ...
Ͻ ϴ ...
̰ ذϷ...
߰ ۸ ϳ ߰...
˳ϰ ŭѰɷ...
...
ť ĥ ϰų... ۰ ĥ ϸ...
濡
õõ ϴ ...
sync Ű Ͱ ...
NT Service
̷ α gma 5 ÷Ƚϴ. ãƼ Ẹ.
NT Service ,ʱ κ Ѱ ε,̰ ó
° ¥ մϴ. ,̰ ذ ؼ
øϴ.
NT Service(MFC codeguru ãǵ,MFC ʽϴ. 翬ϰ..)
ʱ κ ִ AppWizԴϴ. ̰ msdev/sharedide/template
س,new project Ͽ ãƺ ̴ϴ.
NT Service е鲲 ̴ϴ.
ø ϱ ū ̴ϴ.
ɸ
۷ ϱ
ioctlsocket() ۷ ϴ° ˰ , ݴ ۽ ۷ ˾
ڽϴ.
, winsock 2/blocked socket ϴ.
ɸ
..,н迭 ioctlsocket ۽ ۷ ˾Ƴ
ִٴµ,Ե װ ʾƿ. :)
ȳ ϼ â duiclemeԴϴ.
.
˱ ϵ忡 ſ ؼ WSAioctl ϰ..
ϵ忡 ۸ ׳ ϴ ɷ ˰ ֽϴ.
II ϽŴٸ..Ƹ..
ϵ忡 WSASend Լ Ҷ ִ ũ ŭ
Ȯ ˰ ֽϴ. ̰ ũ.
۸ ũ ξ..
īƮ ...
= ũ*īƮ.
(, ʴ´ٸ)
ϵ忡 ؼ ʴ´ٰ...˰ ֽϴ....
...ɽ ±.....Ȥ ã ð...
ƴ϶ Ե ˷ ּ...
.......â
TCP/IP ῡ send() Ͱ ߰ 찡
ֳ? Ŭ̾Ʈ κ ;ߵǴµ, и
´ٴµ Ŭ̾Ʈ ϴ .
̷ 쿡 ƽô Ȥ ô..???
ݻ° ʴ tcp/ip ̴ϴ.
ؿ ϰ Ȳ ϼ.
, send ϳ recv ϳ Ǵ ˰ recvƾ ôµ
send ŭ recv ʽϴ.
send ̰ Ǿ recv Ǵ 찡 ֽϴ.
send ó ö Ÿ ϳ óϰ ʿ
Ÿ ߱ ó Դϴ.
( 춧 Ȳ߾... ^^)
recv size üũ .
recv ļ(?) ̴ϴ. ^^
-- ȭ, soaring@netian.com
Ȥ ʿ TCP_NODELAY 0 ϰ,ʿ װ 1
̳? ̰ ñϱ. غð ˷ֽø
ڽÿͿ.. ɸ
ɼǿ TCP_NODELAY
ָ ̷ 츦 ִٴ ҹ ִ ɼ Ű Ʈ û
ٰ ؼ Ⱦ .
·ų и ߰ ų Ѳ ٿ ŵ ִٴ
Ȯε Դϴ. ̷ 쿡 縮 ٿǰų
̻ ϴ.
Ҿ.
ȳϼ...
Ͽ ۽ Ⱑ ִ ...
к Ѵٸ,
쿡 100% ʴ´ٴ ...
̰ , ׳ ̴ ݷ ְ...
TCP, UDP ߿ ʴٰ մϴ.
Ȯ ְ...
TCP Ÿ ֽϴ.
⼭ ´ٴ ǹ̴ ΰ ְ...
Ÿ ۵ 찡 ְڰ...
DZ ߴµ α ...
ذ ٰ ؾ߰...
̷ 츦 ؼ ȸθ ؾϰ...
TCP UDP ü ϵ νϴ Դϴ.
Ư Ʈ Ʈ Ȳ
̰ η νĵǴ ϰ .
ٵ װ ̰ ٰ ...
0.01% ϱ...
ᱹ ̷ Ÿ ְ Ǵ .
α κ а տ ֽϴ.
2 µ ѹ з 3 о
аų ݴ 찡 ֽϴ.
׳ ̰ аų ۿ ϸ ...
о о ȵǰų ᵵ ʴ ġ .
Դϴ.
Ǵ Ƽ μ Ƽ ɼ .
NODELAY ϼ̴µ...
ݾ ٸ ...
ִ ٰ մϴ.
ý Ƽ ణ ϴ ȵǴϱ.
Ŷ © ɷ дϴ.
̰͵ ΰ α ؾ߰.
ᱹ, α Ű ü ؼ
Ÿ ְ ִ
case by case ִ
ý ϴ ׳ ִٴ .
е α Ͻ ʿ , å ִ°
Ʈϰ ٹ̷ Ͻô ִµ...
̻ 8086 640K α ϴ ƴմϴ.
ϰ Ŀ ˳ α մϴ.
ϵ ħ Ǵ Ȳ̰
ŷڼ ü ̱ Դϴ.
M$ó ũ ó ϼ ¼ ¼
ڱ Ǽ ƾ ϴ .
ó ִ ؼ...
Ⱦ Ǿ...
...
е ̰ ȿ̸鼭 ŷڼ ִ
α Ǿ մϴ.
ó dz õ ϴٰ ̷ ... ...
ȫ (kingduke)
쿡 ؼ ϴ.
,ེ ذ߽ϴ.
° ̹ ġ Ÿ̾. :)
, غ.. ö
̶±. Ͱ ġ° TCP/IP ̶ϴ. TCP/IP
streaming protocol̶.. ̸ ƴ϶ϴ. ,
ġ
Ӹ ƴ϶ ŵǴ 쵵 ִϴ. ,
ؼ տ ũ⸦ ŷϰų,ؽƮ
CR/LF δϴ. ų پ ƿ ذϴ°
α ̶±. ,UDP ̷ ٰ մϴ.
ɸ
۽̵Ǵµ ȵǸ..
ߴܵǴ ٰ ˰ ֽϴ. 켱,
¸ ϳϳ غ. ߰ ٰų ϴ°
Դ
.
, MFC ʰ ׳ , Ȯ
亯
ϱⰡ , ˱, MFC ۽ ˰ ֽϴ.
װ
´ٸ, ۽ Ǿ װ ̹ Ҵٴ ϴ.
׳ ڸ, ⼭ ̽, Ŷ ġ ų,
ߴٰų, ť Ƽ ƴѰ ñϱ.
ϳ ۵Ǵ°..WSAAsyncSelect ϴ , ó
ϰ ؾ մϴ. װ Ƿ ¥ Ƿ ,
Ȳ̶ ƿ winsock nonblocked socket ų, ѽθ
MFC
ٰ ϴ. ü ڸ, WSAasyncsel
ect ó ƴ win32 event ˸ ϴµ,
װ
ؼ ι ̻ ó մϴ.
ɸ
[] virtual PPP ǻͿ UDP۽ϱ
proxy server
˱ε, proxy server ' δ' ,
ּҸ ʿ ϴ proxy server
ؼ ӿ ؾ Ѵٰ .
ms proxy server ڸ, UDP ῡ proxy ,
1. Ŷ 뿡 ο ߰ؼ ¥ ּҸ ۴ϴ
2. proxy ͳݰ Ʈ ,װɷ ϴ
ִٴ±. 1 ǻͿ ؾ ϱ
2 ȿ̶ ֽϴ.. ƹư,̷
̶ ̹
ȵȴٴ . ȭ ִ° ƴѰ ۵Ǵ±.
..! subspace PPP ưϴ. ̸
⸦ ؼ proxy ϴ ˾Ƴ´ٸ Ҹ °,
Ȥ proxy , 'Ϲ' proxy ϴ UDP
˰ ִ° ƴұ?
.., VDOlive RealAudio UDP ֽϴ. װ͵鵵
غ߰ڱ.
͵ ߰ߵǴ.. 켱, subspace ü FAQ firewall/prox
y ȵȴٴ ֱ. ұϰ proxy.hitel.net
UDP ϰ ֱ. ڸ, ¥ PPP ȭӳ
Ʈŷ ǻͿ proxy ϴ ִ° ƴұ?
ñ
.
.. ذ ϸ, ͳ δ UDP
ٴ ?
.. Ϸ proxy,UDP Ű . RFCʵ ñ
.. ٸ ʴ. proxy¾
.. Ƿ ? .. Ϸ簡 ɸٴ.
real ppp, proxy ʼ ƴϰ ûΰ ˰ ִµ.
proxy °ű ʿ ׳ °ű...
ִ õppp ... ڳݵ ɷ ˰ ֳ.
۰ proxy Ư Ʈ(http, ftp) Ǵ° ˰ ֽϴ.
Ÿ ɽ ʿ䰡 ...
Ʈϰ 谡 ٵ...
real ppp Ʈ ۰ ȭ ƹ .
ȭ ε Ʈ Ҽ ϱ.
̽ ϴ Ʈ Ʈ ڿ Ź
غ ְ... ǹ...
-- ȭ.
Ʈ ӿ Ʈ κ α Դϴ.
Ȯ ӹ ڳ.
( ΰ.. ^^;)
˰/غ δ TCP UDP /Ŭ̾Ʈ
ؾ ϴ° ..
ó TCP /Ŭ̾Ʈ ̰ UDP ±
˰ ־ŵ.
TCP Connect Ǿ ϰ,
UDP Connect ü IPּҸ ˸ Ѱ ..
~ ϳ ȮѰ .
ǵ /Ŭ̾Ʈ ý۸(ӵ ʴ)
TCP ϰ /Ŭ̾Ʈ Ŭ̾Ʈ/Ŭ̾Ʈ
(ӵ ݵ ʾƵ Ǵ) UDP Ϸ
̾ϴ.
̷ ϸ ̳ ܿ ϴ κи
ӿ ̴ ʹ UDP ؼ Ŭ̾Ʈ
ְް Ͽ( ġ ʰ) ϸ ִ
..(Ʋó) ϴ°ſµ.. ..
ʹ ±...
ô е ϼ ڴµ.
ƽôº ƴϸ ǰ ź 亯 Ź帳ϴ.
Ʈ αֿ մô е ..
ݺؼ ϴ° Ƽ Ÿ.
Ȥ Ʈ α ϽǺ ø ּ. ^^;
Ϸ° Ʋ İ () ΰ Դϴ.
( ܿ .. ^^;)
ǥ ũ .
TCP UDP ǾǾ, Ŭ̾Ʈ/ ° Ʈӿ
óϳĿ ֽϴ.
Ϸν ϴ° UDP ణ ֽϴ.
UDP Ͻô غø ǰ.
õ ̰ /Ŭ̾Ʈ ʹ
Դϴ.
TCP ϴ Connect Ǹ ,
ſ ־ Ӽ , UDP Ͱ
ϰ ι ϰ ٲ . ӵ UDP
.
Ʋݰ , κκи ϰ ӿ Ŭ̾Ʈ
ϴ Դϴ. κ ״ ϰ ϴ
ִ äð ϴ . (Soph
)
ȳϼ ȸ̵ ̰游 Դϴ.
TCP/UDP TCP/IP Layer߿ Transfer Layer شϴ
ȭ ̶ ڱ.
TCP ȭ Դϴ. ⺻ Ǿ ִ ¿
Ⱥ
ϰ ֽϴ. 鼭 Ǿ ִ°?
üũϸ鼭 Ʈ .
üũ .
ų ﰢ Ŭ̾Ʈ
κи ٽ 䱸ϰų ϰų ø̼ǿ ٰ ˸Ե.
κ ø̼ǵ .
ӱװ̳ ӵ ..
ְ ִٴ ִ ̰
Ʈ ȸ ° 쿡 ְ.. ͳ
TCP/IP ոӸ TCP ŭ Ǵ .
UDP ߳ Ͻø ˴ϴ. ʿ
ʿ ְ Ű Ⱦ.. ʿ
ʿ ٹҾ~ ٰ 丶
2 Ŷ ߸ Ҿ ٰ Ⱦ~ ָ
ٽ ִ ..
ũ ©(̰ Ŷ̶ . ũⰡ ʾҰ
ִ ּ ũ⸸ . ) ȣ ƿ ϴ.
ְ .
߰ ߸ ְ.
̰ ӵ ..
Ʈ Ʈ ϴ Ѳ ϱ.
Ʈ ° ٸ ٽ ϴ ͵
ϱ ȿ . ս ϴ
Ͱ Ƴα ۽ UDP .
REAL Audio ° ⺻ UDP Ǵ°Ű Mud
Mug TCP ..
TCP/IP ⺻ݵ鿡 ڼ Ͻ÷
TCP/IP Illustrated 1,2,3 ʽÿ.
̰ ̴̺ϱ..
fROM PSYCHO
TCP/IP ̺Ʈ .
̺Ʈ ۵ ˼
.
α ϴٰ ̴ ϴ.
FD_CONNECT
ŷ connect() ִٰ µ,
´ٰ ƴմϴ. wParam̴ Ȯؾ մϴ.
ڵ尡 . ϴ.
FD_WRITE
send()ϸ send()Լ ߰ GetLastError()ؼ
ڵ带 Ȯغ BLOCK¼ ɴϴ. ̰ غ
ȵǾ ְų ƮȲ ٺ '' ¸ մϴ. ̰쿡
̻
ϴ. ڰ Ͽ ϱ ؼ
۰ ° Ǿٴ ˷ִ FD_WRITE Ŀ
send() ؾ մϴ. *** ؾ FD_WRITE 밡
ѹ 뺸ǹǷ send()Լ 1:1 迡 ʽϴ. ̰
ȵ.
FD_READ
Ͽ о ִ FD_READ 뺸ǰ ̶ ø̼
recv() Լ ֽϴ. 100Ʈ ŵǾµ recv()
50Ʈ оٸ FD_READ 뺸˴ϴ. Ϲۿ Ͱ
ִ
ɴϴ. *** FD_READ 1 recv() 1 д° ̱,
ι ̻ ϹǷ ؾ մϴ. ( )
FD_CLOSE, FD_ACCEPT Ű澵 .
αֿ ־ ٽ FD_READ, FD_WRITE, ŷ Ȳ
. ŷ ? ̻ ϴ.
FD_WRITE ö ٷ մϴ. FD_WRITE
ϴ. ٰ ŷ ɸϴ. FD_WRITE
ö . Ѹ ð
ϴ ϸ, ť ־ ξٰ FD_WRITE
ť ִ ۽Ű Ǵ . װ ٰ
ŷ ɸ ؾ.
̷ ϴµ 1 Ŭ 1 ϸ .
ŵ.
ƨ ...
ȳϼ. Ʈũ ֽϴ.
ٸ κ ϼ Ǿµ Ʈũ κ ġ ʱ.
Ʈũ κ ° RPG ӱ 10 մϴ.
select Ǻ ioctlsocket Ͽ о
Ÿ ̸ ˾Ƴ recv մϴ.
select Ͽ о Ÿ ִ° Ǵ Ǿ
ioctlsocket Լ ϸ dwBytesRead 0 찡 Ȥ
ȴٴ ̴ϴ.
ٸ κ Ҵµ Ȥ ڵ ƨܳ
찡 մϴ.
α ƴ ŷ(³?) ߽ϴ.
while(1)
{
if(select(socket, &rfds, &wfds, &efds, &tv)
< 0)
continue;
if(FD_ISSET(connections[i].socket, &rfds)) // incoming
data
{
addlen = ioctlsocket(connections[i].socket,
FIONREAD, &dwBytesRead);
if(addlen < 0)
return(-11);
if(dwBytesRead == 0)
return(-12);
recv(...
.
.
.
}
ڰ ƨܳ° ü ƴ϶ ioctlsocket 0 µȴٴ°
° غڽϴ. ƴ
ϱ, ٸ Ʈ ø ٸ е 亯 մϴ.
ioctlsocket Լ Ẹ ʾƼ, Լ 0 ϴ 쿡
ϰڽϴ. ̶ ̷ Ϻϰ
˾Ƴ ϴ 찡 Ƽ..
غ..
TCP/IP, FAQ ɽ ߰ߵǴ°, send WSASend Ŷ
״
ʴ´ٴ ֽϴ. ۽ ޱ ,
װ
۽ ״ ʴ´ٴ Դϴ.
,
aaa bbbbb cc dddd eeeee
̷ Ŷ ´ٸ, ʿ
aaa bbbbb cc dddd eeeee
̷ ʽϴ.
aa abbb bbcc ddddeeeee
̷ ְ
a a a b b b b b c c dddd eeeee
̷ ְ,
aaabbbbbccddddeeeee
̷ ִ°̴ϴ.. TCP/IP Ʈ Ѵٴ° ˰ ?
TCP ̷ ִ ȮϰԴ ãƺ ʾҽϴ. ,
̷
ִ° Ȯմϴ.
, recv 0 ϵǴ° graceful disconnect մϴ. ,
̰
ioctlsocket ϴ ڱ.
켱, ioctlsocket , ioctlsocket ƾ ũ⸦
° TCP Ư ̶ ʽϴ.
̻.. ٸ е Ʈ غ ͱ.
ȳϼ.
UDP ϴµ.
bind Ŀ SOCKADDR_IN ڱ ּҰ °ɷ ˰ ִµ
UDP 0.0.0.0 õǾ ±.
getsockname() ϴµ 0.0.0.0
µ
Ȥ UDP ڱ ּҸ ˾Ƴ .
VisualC++ ãƺϱ UDP Connect DZ 0.0.0.0 ´ٰ
ϴµ .. .. TCP ϰ Ʋ ..
Ʒ ϸ ڱ ּҴ ã ִµ Ȯ ƴѰ
.
Ʒ ...
Ͽ ڱ IP Address ˾Ƴ ֽϴ.
.
#include "winsock2.h"
#include "stdio.h"
BOOL GetIPAddress(char *Address)
{
SOCKADDR_IN server_sin;
PHOSTENT phe;
phe = gethostbyname("localhost");
if(phe == NULL)
return(FALSE);
phe = gethostbyname(phe->h_name);
if(phe == NULL)
return(FALSE);
memcpy(&server_sin.sin_addr, phe->h_addr,
phe->h_length);
strcpy(Address, inet_ntoa(server_sin.sin_addr));
return(TRUE);
};
void main(void)
{
WORD version;
WSADATA wsaData;
char IPAddress[128];
version = MAKEWORD(2, 0);
WSAStartup(version, &wsaData);
if(GetIPAddress(IPAddress) == TRUE)
printf("%s\n", IPAddress);
else
printf("Error !\n");
};
^_^ Connect ׳ Ƽ ־µ
̹ ߵڴ.. ݾƿ
Connectÿ ŷ Ǹ鼭(ip ߸ġųϸ ŷ )
α ¿ ̸ݾƿ~~
¼... ҷ
ͺŷ ٲܷ~~
icoctlsocket(socket,FIONBIO,(unsigned long *)TRUE);
̷ ߴµ ҿ ~~ ~~~
ϰ ǿ connect õؼ
ʵ ȵǸ ڽ
ٽýõ
θ ؼ ϰ Ͱŵ.. ....
^_^ ɼ ̴ Լ ̰ ϸ ̷ ɰ
... ʺٺ ϴ° ´ ٰ ٸе
óϰ ... T_T Ƴ ߸ھ~~
T_T α̶.. ~~
亯 Ź 帳ϴ`~~ ^_^
ٸ~~
setsockopt time out ϸ ɰ̴ϴ.. recvtimeout,sendtimeoutΰ..
ɰ̴ϴ. ȳ.. ȮѰ 'ȴ'°̴ϴ. .
̹
FD_CONNECT óҷ
״ ӵǴµ ٸ IP ҷ
10061 ̻
WSAECONNREFUSED : õ ź Ǿ Ÿ
switch(WSAGETSELECTEVENT(Event))
{
case FD_CONNECT: sprintf(String,"Socket
Error : %d",WSAGETSELECTE
RROR(Even
t));
MessageBox(NULL,String,"",0);
break;
ٽ...
switch(WSAGETSELECTEVENT(Event))
{
case FD_CONNECT:sprintf(String,"Socket Error : %d",
WSAGETSELECTERROR(Event));
MessageBox(NULL,String,"",0);
break;
̷ϴ...
ŷ ׳ connectô ƹ ̻ Ǿϴ
űϰԵ ڱڽ Ҷ 0 ̳ɴϴ ...
IP (?) PORT() غ ȵǾ ϴ Դϴ.
Ǿ Ȯغ... portȣ...
ȳϼ?
UDP ϰ ִ Դϴ. .. T_T
Ʈ α մ ȵ..
̷ ϰ Ǵ±..
UDP ÿ ° ϴٰ ϴµ.
ϴ ƽôº ֽñ ٶϴ.
ÿ Ͱ óǴ°.. ..
ѹ ISP óϴ° иؼ
Ҿ~ °..
... (.. ˾ư°ͺ ° ±..
°ͺ ƴ° .. T_T)
Ź帳ϴ.
Broadcast սʹ ϴϴ.
ǿ ҰѰ. 192.168.1.xԴϴ.
ŬC̱ ݸũ ǰ.
x ִ밪 255 ˴ϴ. x 0 254
IP Broadcastϰ Ǵ°. ڵ.
ÿ Ǵ UDP IPX ˴ϴ.
PS. UDP BroadcastŰ äα µ
ħ ̷ ö .
äÿ UDP ҵ մϴ.
ä̳ ϵ UDP ȴϴ.
Ʈȣ
ȳϼ.. Դϴ..
tcp/ip Ҷ ݵ Ʈ ȣ ϴµ..
Ʈȣ α ִ ȣ Ͻø˴ϴ
Ӹ ۰ ȳµ.. ftp telnet α鿪
Ʈ ȣ ֽϴ.. ̿ tcp/ip ϴ α
Ʈȣ ִµ ̹ȣ ߺǾ ȵ˴ϴ.
.. ⸦ ڸ(ª 볯 .. -_-)
ǻͿ ٸ ǻͷ ϴ
ã ܰ谡 ֽϴ..
ڼ Ʈ å ñ..
ϴ ϵ ϴ ã..
α ϴ ãϴ..
ٷ αΰ ϴ° ƮȣԴϴ..
μ Ѱ .. Ǽ̴.. -_-
ֵ Ƿµ .. -_-
ٶ Ϳϴ.. Ϸǽñ.. ^^
ȳϼ.
α API ֽϴ.
TCP/IP Ŭ̾Ʈ Ŷ µ
Ŷ Ÿ ũ⸦ ִٰ µ Լ
Ź帳ϴ.
ũ⸦ ϴ ˰Ͱ.
ϰ ij͵鵵 Դٰϴ ӱ¸ µ
̻ϰ Ŭ̾Ʈ ϴϱ Ŭ̾Ʈ
SEND RECV ϴ° ҽϴ.
ϸ ̴ ͵ ߿ Ǵ.. -_-;
Ŭ̾Ʈ ߵǴµ ȵdz.
Ű ڱ ȵǴµ ڱⰡ ְ̰..
۹ ƴұ ;..
ϰ ߰ؼ ٽ 帱.
1) SEND/RECV ӻ, Լ ?
2) WSASEND/RECV ִŰ ׳ SEND/RECV ?
ȿ..
3) SEND/RECV ȭ ͺŷ ϴ.
ٺ ȭ ͺŷ Ŷ Ⱥȹ
ϱ
.. ñմϴ.
4) ͺŷ SendMessage PostMessage Ἥ WD_WRITE,WD_READ
µ (Ϲ ΰɷ дϴ) ó
SendMessage
PostMessage ˰ͽϴ.
Post ϴϱ ϴ ʾ ijͰ
沱 ٴ --;
Send ݸ ϰ Ŀ Ŭ̾Ʈ Ŷ
ƿ
ϴ մϴ.
ʹ ΰŰƼ ˼ѵ.
ʹ ġ.. T_T
ä̸ ȵǴµ..
DX ӱ¶.. Ŷۼž絵 ؼ Ŭ̾Ʈ
ܼ Ź帳ϴ.
3 5ϱ WIN95,98 NT
Ŭ̾Ʈ ǹ. --;
Ź帱~.
.. ϳ,... ..
Ŀ ŷ, ͺŷ, ...
̷ ֽϴ.
ͺŷ ҷ 尡 Ŀϴ.
ֳ! ̷ Ȯؾ
ϴ ֱ. ٳ å α Դϴ.
Ŀ Ϲ Դϴ.
̳ ȣϱ .
ó óǴ 带 ϹǷ...^^;
ŷ մϴ. timeout ۰ ..
Ȯ Ʈ غ
߽ϴ.
send/recv WSASend/WSArecv ̴... ϴ... ⺻
ø . WSA~ Ŵ 2 ο ɵ
ϰ մϴ. ڸ ø̳ QOS...
̷ ʴ´ٸ ׳ send/recv ..
ø ϴ ̿ϹǷ...
WSA~ ...^^;
׳ Ѱ ִ ..
Լ.. ° ϴ.
2 Ƽ ۵... ij/ ̿ ʴ´ٸ
ʿ䰡 մϴ... (³??? ̱..)
Ʈϳ... ϳ...
ڱ. ֳϸ ƴ..
̺Ʈ ̿ϹǷ....^^;
... ...
ξ .. Ʈ... ᱹ ӵ ʿ
¿ ҵ..
ϴ ..
ٸ ãƺ~~
̸.. Ǿ⸦..
> 챸 ʹ~~~~
Լ ϴٴ~~~ ..
ȳϼ~ 亯 ⸸ Դϴ --;;
亯 ҽϴ.
ü ť¸ غ ߽ϴ.
.
帮
FD_READ ɧ recvԼ Ŷ
FD_READ ٽ ȣϴ Ϳ ؼԴϴ.
case FD_READ:
recv(socket,buffer,10,0);
if (buffer==1) recv(socket,buffer,20,0);
break;
α ư Դϴ.
send 30byte ½ϴ.
Ŭ̾Ʈ recv µ 췯 10byte
1̸ 20byte ƶ~ ̷ ߽ϴ.
ٵ α ֳ?
å FD_READ recvް ٽ FD_READ
ȣѴٰ ߽ϴ.
ᱹ recv(socket,buffer,10,0) 3 ݺع
if ϴ° dz? --;
ƴ recv(socket,buffer,10,0)ؼ 10byteް
if ٽ FD_READ recv ݺϴ°ǰ.
.. Ƴ.
ƮαϽô
ƽDzƼ 帳ϴ.
ϸ ҽ ۾ Ȳ̳ -_-;;
Ź帳ϴ.
* buffer ̸ ڿ ѱ ߾ϴٸ
ũ⸦ ̸ ˼ ִ .
ũ⸦ ˱ؼ ¿ ѹ ۿ
.. ~
TCP ..
Ŷ ɰ Ҽ ϴ..
30Ʈ ´ٸ..
10Ʈ 3 ,
30Ʈ ѹ ..
5Ʈ 6 .. ϴ.
÷ ظϸ ť մϴٸ..
ƹư,
recv ȣؾϴ .
Async Ŵٸ, ť FD_READ ö ־ մϴ..
ƾ Ÿ Ÿ Ϸ ɶ ؾ߰..?
ް.. ˻ϰ.. --;
ƹư.. ٿ ŷ ° ..
... Async .. õԴϴ.. --;;
2 Իߴµ, Async سҴµ.. ƾ´ٳ..
ٸ.. I/O Ƽ÷.. (select/poll)
.. ͳ..
- Testors
ڵ忡 ֽϴ.
recv(socket,buffer,10,0);
if (buffer==1) recv(socket,buffer,20,0);
⼭ buffer buffer[] 迭̳ Ҵ ٵ
buffer == 1 . FD_READ ι recv
ϸ
Ŀ ϰ ˴ϴ. ϳ FD_READ
ѹ
recv ؾ մϴ. ϰ ڵ带 ٸ ϴ.
int iRemainBytes = 2; //
ũ 2Ʈ Ǿٰ
int iRet;
char * pBuffer, cBuffer[256]; // ۿ
char cReadMode = 1; //
1̸ д , 2̸ ü
short * sp;
pBuffer = (char *)&cBuffer[0];
case FD_READ:
switch (cReadMode) {
case 1: // д ̴
iRet
= recv(socket, pBuffer, iRemainBytes, 0);
if (iRet == 0) {
//
Ͽ. ŷ ƴ ġ
//
ۿ .
}
else
{
//
о. 2Ʈ о ˻
iRemainBytes
-= iRet;
pBuffer
+= iRet; // Ʈ ŭ ̵
if
(iRemainBytes == 0) {
//
о. м
//
2Ʈ
//
ǾǷ
sp
= (short *)&cBuffer[0];
//
о ü
iRemainBytes
= *sp;
//
ü д ȯ
cReadMode
= 2;
}
}
break;
case 2:
//
ü д .
iRet
= recv(socket, pBuffer, iRemainBytes, 0);
if
(iRet == 0) {
//
. ŷ ƴ ġ
//
ۿ .
}
else
{
// ü о.
ŭ Ʈ
//
.
iRemainBytes
-= iRet;
pBuffer
+= iRet;
if
(iRemainBytes == 0) {
//
ü о. ۾
//
cBuffer[]
//
´. αӴ ⼭ cBuffer
//
о ť
//
־ óϸ ȴ.
PutRcvMsgQuene(cBuffer);
//
ȯϰ д 带 ٽ
//
д ʱȭ Ѵ.
cReadMode
= 1;
pBuffer
= (char *)&cBuffer[0];
}
}
break;
̿ ƾ 뷫 ϴ. 쿡
̷
Ŀ ؼ ó ϰ ߴµ
Winsock Դϴ.
̷ ϴ 극 ƼII 300 ýۿ
500
ص ŵ.
ü б 带 ʱȭ Ҷ о
̹Ƿ iRemainBytes = 2 ְ . ()
(Soph )
ȳϼ..
.. ̷ 帮 dz -_-;;
ٰ ø ^_^;;
95,98 NT Ŷ óǴ ° Ʋ ϴ.
95,98 ϴµ
NT Ŷ ȭ ȵǰŵ.
̻ϰ ü ° ϴ
(PC ƴϱ. ٸ ȭٵ)
ƹ ϱ ۹ΰŰ
setsockopt ִ Ŷ۸ Ҽ
ִٰ ϴ.
MSDN̳ Ʈå ɷδ ʹ ư
..
setsockopt ۷ Լ ּ
ڽϴ.
Ȥ ü ٸſ ̷ 찡 ִ
ñϱ.
Ŭ̾Ʈ üϴ.
Ź帱
SOCKET s;
int buf=0x1000;
setsockopt(s,SOL_SOCKET ,SO_SNDBUF,(const char*)&buf,sizeof(buf));
setsockopt(s,SOL_SOCKET ,SO_RCVBUF,(const char*)&buf,sizeof(buf));
̷ ϸ ˴ϴ.
ٵ,ȭ ..۽,ɷ ذ ṉ̀. Ȥ Ŷ ġ
ɰ ó ϽŰ ƴѰ?
ڽ IP
BOOL CAsyncSocket::GetSockName(CString& rSocketAddress, UINT&
rSocketPort)
{
SOCKADDR_IN sockAddr;
memset(&sockAddr, 0, sizeof(sockAddr));
int nSockAddrLen = sizeof(sockAddr);
BOOL bResult = GetSockName((SOCKADDR*)&sockAddr,
&nSockAddrLen);
if (bResult)
{
rSocketPort
= ntohs(sockAddr.sin_port);
rSocketAddress
= inet_ntoa(sockAddr.sin_addr);
}
return bResult;
}
BOOL CAsyncSocket::GetSockName(SOCKADDR* lpSockAddr, int* lpSockAddrLen)
{ return (SOCKET_ERROR != getsockname(m_hSocket, lpSockAddr,
lpSockAddrLen)); }
..ó MFC4.2 CAsyncSocket Դϴ. ư
ȳϽʴϱ...
Ǵٽ ־....^^;
̺Ʈ ü ̿ 2 α ϰ ֽϴ.
˱ Ŭ Ÿ recv() send()
ۼ ѹ ϴ
˰ ֽϴ. , Žÿ
ϴ ҽϴ.
WSARecv() WSASend() Լ ̿ؼ
ۼ ϰ ֽϴ.
ñ Լ ̿
Ŭ Ÿ Լ
ʿ Դϴ.
WSA~Լ ̿ ϴ
Ƽ.
Ե 亯 Ź帳ϴ.
Ʒ ʺ(?) Դϴ..
Ϲ send/recv Լ ٰ ϰ.
ѹ FD_READ 밡
ִ .
ϱ.. 1000Ʈ ´ٸ, 1000 Ʈ
ؾ FD_READ ϴ .
˱ Ǿ ѹ
ϴ 찡 ɷ ˰ ֽϴ.
ٸ, ѹ ƾ ϴ ι ްԵǰ..
ٸ ε ؾ ϴ .
̰ ̶,
̸ üũؾ ϴ ͵ .
FD_READ/FD_WRITE ϴ ̳..
Ȳ ֽϴ.
ϴ ˰ ִ ڸ..
FD_READ , ۽ Ϻζ
ϸ ϰ, ̶ Ϻκ ؼ ۿ ְ
ε ϸ, FD_READ ̾ δ.
̶, ü ̸ üũؼ ü Դٸ
ϰ, ε 0 .
(WSAEWOULDBLOCK ظ ϰ ֽϴ)
FD_WRITE , ѹ ü ϴ 찡
Ƿ ( ϴ ...-_-;;)
۽ ϸ, ü ̸ŭ ´ٸ ۾ ģ.
( 쵵 WSAEWOULDBLOCK ڱ,,,)
̺Ʈ ó ٶ, SEND RECV ־
....
... ϴ.
ӿ ...
亯 Ź帳ϴ. ^^;
1.1 帳ϴ.
FD_READ ۿ Ͱ ŵǾ ϴ Դϴ.
1000Ʈ ߴٸ ѹ 1000Ʈ ְ Ͱ
ɰ ŵ ְ ƴϸ ι Ͱ Ѱ
ŵ ְ ɰ ŵ ֽϴ.
̰ 2 ڽϴ. Ƹ ƴұ?
·ų ̷ Ҷ FD_READ ϰ
recvԼ ؼ ŵ ŭ Ƽ ۿ ϸ ˴ϴ.
FD_READ Ͽ ڵ Ʒ
ϼ.
FD_READ ŵɶ ϴµ FD_WRITE ó
Ŀ ̳, ƴϸ ŷ ٽ
뺸ȴٴ ٸϴ.
ŷ Ȳ̶ ַ sendҶ ϴµ, ƮȲ
̳ Ұ Ȳ մϴ.
ϴٰ ŷ ɸ, ť
ξٰ FD_WRITE ־ .
UDP ڽ IP
UDP ڽ IP ..
ڽ IP ´ٴ° TCP Connection ǰ
Ǿ.. ̽ ش IP ´ٴ¶̱ .. (??)
.. ̳
ƹư Ͱ IP ִٴ° ƽÁ.
ڸ PPP Ǿְ, Lan ī尡 ־
Ʈ Ǿ ,
ڽ IP Ѵٸ PPP IP ְ,
Ʈ IP ֽϴ.
̷ ƴ϶ ī尡 ְ..
ϱ IP Ǵ° ϴ.
TCP Ŀ ڵ ̽
Ǿ Ȯ ش ̽ IP Ǿ ֽϴ.
UDP getsockname() ᵵ "0.0.0.0" ƿð̴ϴ..
Ʈ ڽ ּҰ 192.0.0.1 .. Ʈ
Ŭ̾Ʈ ڽ Ϳ .. 192.0.0.1 ,
PPP Ͱ ϸ.. ڽ ּҴ PPPκ
°.
UDP , ̽ ۵
ֽϴ..
̷ .. ᰰ UDP ڵ ̿
ڽ IP ° ϴ. ( ˰ ֽϴ)
ڽ IP ߰ڴ.. Ѵٸ..
ڽ IP ̾Ƽ.. Ѱ ..
ڽ IP Ʈ ִ ҽ.. Ʒ ٿϴ..
char buf[100];
gethostname (buf, 100);
HOSTENT *p;
p=gethostbyname(buf);
struct in_addr *ptr;
char **listptr=p->h_addr_list;
switch(p->h_addrtype) {
case AF_INET:
while((ptr=(struct
in_addr *) *listptr++) != NULL) {
printf("%s\n",
inet_ntoa(*ptr));
}
}
- Testors
Direct Play ǽؼ,
TCP/IP ̿Ͽ α ¥ ϰ ֽϴ.
( Ʈũ ⺻ ִ ϴٸ...)
... Ϸ ϴ IP TCP ƴϸ IP UDP
ϰڽϴ.
UDP ӵ
TCP پ ӵ .
˰ ֽϴ.
ϰڽϴ. Ե ˰ ð?
ǰ TCP ̿Ͽ α §ٰ ϴµ α ?
, UDP ؼ α ¥ 찡 ֱ ִ?
Ϲ α TCP մϴ.
Ÿ Ǵ ͵̱ .
ӵ ״ ŵ ...
TCP Ÿ ϴ ̶ Ϳ
UDP Ǵ Ȳ ְ.
״ ߿ Ÿ, Ϻ ҽǵǾ Ÿ
ٷ մϴ.
Ƹ Ÿũ κ ä̳ IDȮε UDP ϴ ......
Ÿ ߿伺 Ͻð ӵ Ͻô
......
ȳϼ ̰游 Դϴ.
ܱ ӵ ũ3
ӿ UDP Ȱϴ Դϴ.
Ȯ ڸ ΰ ϴ° ǰڱ.
α ΰ Ⱑ ʿѰ
TCP ϴ.
ij ൿ ġ ÷ ְ 鼭
Դٰ ϴ UDP .
¥ Դ ϴ ̹Ƿ
߰ ѵΰ .
UDP ٸ ݵ Ŷȿ Ŭ̾Ʈ
ð ȭ ٸ ڸ ؾ մϴ.
TCP ٸ ϳ ɺ ϱ
Size ڷ ϵ̿.
ӿ ҽǵǾ Ǵ Ͷ..
Ʈ Ŀ ̰ ְ..
ҽǵǾ Ǵ Ͷ ٰ ° °..
ũƮǰ ӿ UDP մϴ. (κ TCPԴϴ)
ҽǵǾ Ǵ° UDP.. ̿ µ
÷ ֶֶ ִ.. ° Ͼ.
Ⱑ ʴ ӵ ֽϴٸ..
; ʰ..?
̶ ϼ,
UDP ӿ ʿ ִ ?ó ٴ° Դϴ.
ִ ڵ常 lightϰ ۼشٸ
ŸӰӿ UDP TCP ξ ݴϴ..
UDP
Ŷ ҽǿ û/ ó ְ ˴ϴ.
Ŷ ˻ϴ°͵ ʿմϴ.
(UDP Ŷ ϴϱ.. ϸ鼭 ׳ ų ʴ´ٴ
Դϴ)
ó ϸ鼭 UDP
TCP Ŷ ۴ٴµ ֽϴ.
ظ ùķ̼ǰ TCP ߴٰ ڵ
÷ غ ϰ.
߿Ѱ ÷̽ Ŷҽ Ͼ Ȯ ſ ٴ Դϴ.
и, Ͼ Ͼϴٸ ó ɸ ϸ ϴ
TCP ְ ˴ϴ.
ƹư.. TCP UDP Ĵ Ŀ ٸ
ظ ӵ 1000 TCPε
մϴٸ.. (̻ Ǹ UDP ° ؾ ϰ.. Ƹ µ
UDP ˰ ֽϴ...)
ŸũƮ TCPδ ֽϴ.
ð Ŷ ٽ UDP, ƴϸ TCP ڳ.
.. UDPٷ°Ͱ ȭ ó.. ƴϴ..
Ʈ α ó Ͻô°Ŷ ϴ TCP Ẹô° ϳ.
- Testors
ps. E Դϴ. ֽŰó TCP ϳ.
мغ TCPԴϴ.. ^^;
Ʒۿ Ǵ Ͷ..
ӱ ӿ ij ġ ð
Ͱ ġ մϴ.
¥ Ҷ ǥ ƴ ǥ
ؾ մϴ. (ȭ ȵǹǷ ̷ ؼ ַ ϴ°.)
ؼ ġ ǥ µ ǥ õǸ鼭
( ̷ ִ ϴ ͷ
ؾ߰.) ٽ ŵǴ .
̷ ġ UDP ǵ ϴ.
ϴ õ ӿ ..
__
̰游
ƴϿ. ʹ 亯 ƴ϶....Դ
ʹ 亯̾ϴ. ȣ.
.
̷ ڲ ˼...
Ⱑ ̰ŵ...
ð µ å ̰ ־.. ̷
ġұϰ ϴ.
Ȥ ٸ TCP UDP ֽϱ?
α TCPԼ writeԼ
UDPԼ sendto ֳ?
亯 Ź帳ϴ.
ȭ!
ٹ.
ȳϼ.
tcp udp .
α ̿ ϱ.
ٷ ɷ ˰ ֽϴ.
ÿ Ϸ, δٸ 2 ʿմϴ.
ٸ ݷ ǰ.
.
UDP 8Ʈ̰ TCP 20ƮԴϴ.
IP̾ . (20Ʈ)
ᱹ.. TCP 40Ʈ ǰڳ
.. TCPǰ ŶȮΰ ֱ ..
Ŷ ٸ͵鵵 Դٰ .
Ƹ 2ΰ 5ΰ ϴٸ..
ð UDP ſ ϴ.
ؼ ŸӼ 䱸Ǵ
UDP ° ϴ.
Ÿó.. Ǹ UDP..ó ϸ TCP ϴ°
ڳ
ȳϼ...
Ȥ ipϰ Ʈ ũ ϴ
˼ ...(ڽ ǻͿ)
ip ʾƵ Ǵµ...
Ʈ ũ ؾ ϰŵ...
Ʈ ip Ϸ ˾ƾ Ѵٰ ؼ....
Ȥ Ʈ ũ Ҽ ִ ˰ ø
ּ.....
ذ Ȱ....
Ϲ ũ зǴ κи 1 ä ˴ϴ.
10 CŬ 255.255.255.0 ̰.
network ĺ̰. ڿ ȣƮ ĺմϴ.