1 / 60
文档名称:

【网络编程】之一、初识WinSocket.pdf

格式:pdf   大小:8,117KB   页数:60页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

【网络编程】之一、初识WinSocket.pdf

上传人:cjc201601 2023/3/18 文件大小:7.93 MB

下载得到文件列表

【网络编程】之一、初识WinSocket.pdf

文档介绍

文档介绍:该【【网络编程】之一、初识WinSocket 】是由【cjc201601】上传分享,文档一共【60】页,该文档可以免费在线阅读,需要了解更多关于【【网络编程】之一、初识WinSocket 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:.

WinSocket
WinsockWindows
UnixBSDSocket
 

WinsockWindows!"# $Winsockl%Winsock2&Winsockl
'()*+!,-./,12&3-Winsock2) 4+!,-
5678./0
9:-;<Windows=>?)@
A?
3-./0B CB+!D/,3- 4+!
,123-@
API,4+!FG,-H./0 I
JHKLD/0 *MNOP&WINSOCK)QRH
0K,STUVVWX-YZ
[\]winsocket
^Winsock)_`3-WSAStartupabcdWinsockefJD 12abgh
WSAStartupijkSOCKET_ERROR,mnoMWSAINITIALISED,WSAStartuppq1
Z
[cpp]viewmaincopy
(
,

4.))r
wVersionRequestedspH*tabWinsock"# u=vwspHx"#y zvwspH
"#y*{|3-}MAKEWORD(x,y)sp"#' r m~x€"# y€x"#
IpWSAData8sWSAData‚Nsƒ,WSAStartup…†‚NE‡ˆuabWinsockefJ
D‰Š
IpWSAData8sWSAData‚Ns‹ WSAStartup…†‚NE‡ˆuabWinsock
efJD‰Š
[cpp]viewplaincopy

2.{
;ŒwVersion*i3-Winsock"#y
;//wHighVersionabWinsockefD;<Ž="
#
5.
U=vw€x"# zvw€"#
[WSADESCRIPTION_LEN+1];
[WSASYS_STATUS_LEN+1];ŒS’“ ”p"#
Winsock•– —˜™š›-œ
;Œ€Ž›ž“I Sockets,uŸ ¡¢{3-£0¤
¥
;//iMaxUdpDg€ž¦§Ž›¨©
*IpVendorlnfo;ŒWinsock—ª«¬­®¯°Š
WindowsI™±²-œ.
12.}WSADATA,*LPWSADATAr:.
´*3-µWinsock¶ !·-S¸žKu¹-¤¥º»¼½Z
intWSACIeanup(void);
12·-†¸žgh¾™±²¿À ÁÂÃÄōÆeiu¼½ KL¢^8WSAStartup·-Ç
L†8WSACIeanup·-.
noœÈZ
Winsock¸ž·-gh›É…jkSOCKET_ERROR(—˜M-1),*{|·-WSAGetLastError
ËÌnoÍΉŠZ
[cpp]viewplaincopy
(void);
K†¸ž·-ijk8noÏ uϟÐ(Ѧu"#)EÓÔp
q mÕÖpqŸÇ|WSAE×..CB*7{|3-WSASetLastErrorÆpqnoϟ.
ϝØZ
SÆmsdnØ:
[cpp]viewplaincooy
1.#defineWIN32_LEAN__AND_MEAN
2.
3.#include<>
4.#include<>
5.#include<>
6.#include<>
7.
8.//
9.#pragmacomment(lib^")
10.
11.
()
13.{
14.
;
;
;
18.
19./*UsetheMAKEWORD(lowbytehighbyte)*/
=MAKEWORD(2,2);
21.
=WSAStartup(wVersionRequested?&wsaData);
(err!=0){
24./*Telltheuserthatwecouldnotfindausable*/
25./*WinsockDLL.*/
("WSAStartupfailedwitherror:%d\n”,err);
;
28.}
29.
30./*ConfirmthattheWinSockDLLsu$.*/:.
31./*NotethatiftheDLLsupportsversionsgreater*/
32./*,itwillstillreturn*/
33./**/
34./*requested.*/
35.
(LOBYTE()1=2||HIBYTE()!=2){
37./*Telltheuserthatwecouldnotfindausable*/
38./*WinSockDLL.*/
("\nn);
();
;
42.}

("\n");
45.
46.
47./*.*/
48.
49./*AddnetworkprogrammingusingWinsockhere*/
50.
51./*thencallWSACleanupwhendoneusingtheWinsockdll*/
52.
();
54.
55.}
m~Ú[Ûwinsocket!›ÜHÝ8!:.
 socketAPI
ßvAPI¸žZ
1socket¸ž:Thesocketfunctioncreatesasocketthatisboundtoaspecifictransportserviceprovider.
2àbind¸ž:Thebindfunctionassociatesalocaladdresswithasocket.á8â-¢ãäåæ
3àlisten¸žZThelistenfunctionplacesasocketinastateinwhichitislisteningforanincoming
connection.á8â-¢ãäåæ
4àconnect¸žZTheconnectfunctionestablishesaconnectiontoaspecifiedsocket.á-çèçéæ
5àaccept¸žZTheacceptfunctionpermitsanincomingconnectionattemptonasocketá-¢ãäåæ
6>send%recv,sendto%recvfrom¸žZsendandrecvdata!
STUMêëÝZ
socket¸ž
¸žìíZ
[cpp]viewplaincopy
(
,
,
I4s.._)inintprotocol
socket¸žîO8?ﺻð‰ßvñ
ò8óžafsôîOßv­p8õö÷ñm՟ÓÔwindows./0Eô*pqøHñ
8âùúAF_ÐûPF_!MSDNE8üýNotethatthevaluesfortheAF_addressfamilyandPF_
protocolfamilyconstantsareidentical(forexample,AFJNETandPFJNET),soeitherconstantcanbe
used.
AFþNET:€IPV4r
AFJNET6Z€IPV6r
AF_UNIXZ€#õßv(3-8/0)
òÿtype


SOCK_STREAM:TCP
SOCK_DGRAM:UDP
SOCK_RAW:!"#$%
&socket
'(ICMP)*+,
SOCK_SEQPACKET:-./012345
67protocol89'(+,
.:;&<=>0?***@ABCD'(EF
GH+,:.
:;JKLDMNINVALID_SOCKETOD-1,PQJRMNSTUVWXYZ
[O
bindJ\
J$
\
[cpp]viewplaincopy
(
,
*name,

5.))]
>
VW/^_(socketJ`
7_a`+,bcdVW/^,
a(fg/^hijkOlmnoE45pqrs(bindJ>t#/^hij
kuvwiDx&yz`O
{ssocketXYZ_|_}~
€&socket‚t
O
{ƒ„sockaddr
…O
dF†‡ˆ‰\
[cpp]viewplaincooy
{
;
[14];
4.}]
b.
{
;//<spanstyle="color:rgb(51,51,51);font-family:Ar
ial;font-size:14px;line-height:26px;">ŒAFNET</span>
;//<spanstyle="color:rgb(51,51,51);font-family:Aria
1;font-size:14px;line-height:26px;”ijk</span>
;
10charsin_zero[8];
11.};
lsajamily/^O‘TCP/IP+,BC’“”AFJNETo(TCP/IPt•–
BC’“'(—˜sockaddrjnˆ‰O
—˜™—sin_addr\sin_addrˆ‰šad› œs_addr,TIP/^ž œ
[Ÿ(Jinet_addr()| Z ¡¢IP/^£¤~unsignedlong
[7¥Œ¦
s_addroBC-§|htonl(INADDR_ANY)Œ¦s_addr,&yz¨x©ªœ#vw«¬
­®¯ž45«¬’°]
(0±²sin_zero³´µsockaddrjnˆ‰¶·¯sockaddrˆ‰¶·¸¹O
#˜ºd67namelencd™»°¼ž½¾`&(socketaddr¿ÀO
[cpp]vifiwjilaincopy:.
]
=AF_INET;
=htons(8888);
=htonl(INADDR_ANY);
listenJ\
J$
\
[cpp]viewmaincopy
(
,

4.);
45pÁ(listenJ'È
socket¨ÌÍÎÏÐÍÎÑ
ÒÓa®-.2Ô'(::
SOCK_STRE^JV[,SOCK_SEQPACKET]bå¨ÌÍÎÏÐÔ
Sæçèvw0
ÒÓ
éêžéê6ëìíbacklogvw0
ÒÓO
JÁ(~ñMN0,:;KLDMNS0CKET_ERR0R]
connectJ\
J$
\
[cpp]viewHaincopy
(
,
*name,

5)]
vwiÁ(connectJ'Èsockets¯ÍÎÌnameõö÷øùij#45Socket
0
O‘Ìúû0
UDP+,Ñ
fgþÿ


0,T(SOCKET_ERROR)$
[cpp]viewplaincopy
;
((void*)&daddrJ0Jsizeof(daddr));
=AF_INET;
=htons(8888);
(=inet_addr("");
\(socket>(structsockaddr*)&daddr?sizeof(daddr))$
accept*
+,-*
[cpp]viewplaincopy
(
,:.
*addrJ
*addrlen
5.)$
./01234accept56789listen:;socket<=>?***@ABCDEFGHIJ
KLMNOPQRSTKL589>?***@UVWPXJ
34YRSZ[\T]YINVALIDSOCKET-1$
s*89RSZ[\$
addr*fgsockaddrhifj<= kl
addrlen*
<=himn$
[cpp]viewplaincopy
;
;
|=sizeof(SocketAddr);
|=accept(Socket^(structsockaddr*)&SocketAddr,&addrlen);
sendrecv*
+,-*
[cpp]viewplaincopy
(
,
*buf,
,

6.)$
op-<=q-./0r4stu4sendvgTCPXwOxyz
<=stO{4sendg./0yzHIT|./01}4sendvg<=styzr~;
s*f
yzxRSZ[\$
buf*OP€‚r4stƒyz„…†$
len*‡ˆƒyzS‰$
flags*Š‹ŒTŽTO{‘0*
’“*”OPVsend•SocketD–E—˜™ƒš›œRSyz„…@žŸ
 z¡¢£¤¥¦T§¨D›œ©Bª«¬­®T¯°±SocketYSOCKET_ERROR
[cpp]view,pledpcopy
(
,
*buf,
,

6.)$
op-<=q-./0r4stu4recv5TCP²wx::.
S:f
xRSZ[\$
buf*f´µP„…†T±„…†4v€recv¶$
len*f´buf·¸$
flags*Š‹ŒTŽTO{0$
§¨recvB­Y¹SOCKET_ERROR,§¨recvD›œžŸº©«¬@»¼,
Y¹0$
send½¾¿À¾¿*
¾¿ÁÂÃT§¨Ä}ÅT¹Æ¶ÇÈÉʃyzy¡Ë$
À¾¿ÁÂÃT¹ÌÈsocketDÍÎÏ4„…†mnvÐÈ„…†Ñ@ÒÓ2Ô,
ÕÖm„…†YÒÓÖׄ…†Ø¼YÙÚWP©ÛÜÝÞßÒÓ¶„…†Ö×T
à-KoáÞyzÖ×â©ãÃä½ÊƒÈËå34send£¹ËOåÒÓ¶Í΄…†$:.
!socket
FGæçèsocketéêOëìíqÕOë}4API,ªDvîïOëðñTqÕY-tcpudp
<=x./0òóÁÂJ
¾¿À¾¿
RSÏô67¾¿ÁÂõöÀ¾¿ÁÂT34÷øOP¾¿ÁÂu¹ùúâûh¨(4õ
·õü©ý›œþÿ)

API
WSAEWOULDBLOCK!"#$%&'()*+,-./-#
0123 456789:8;+ 5<9:=8>?,-;***@A9
:B#
456789:8;+?5CDB9EFGA7H 8;+I/
7B9:JKL#
+32MNOPQRSTUVW+;XTUPY?ZY[1TUP
\ ];^_`Uabc)*X];A TUdefCPU-#
ga
;XhijP;Xgkalmn#
opqwinsockrIPstuvwxyIuz{|winsockIPstuvwx}~€
ka‚ƒ?]„…Bsockaddr_in?1n‡ˆPIPst‰uvw‰;„…sin_family
‰#
Š1`Ua‹Œ‘-'‘r`vw>u‘’“”‘’•–[—j˜>‹K™Y
š›vwœgetservbynamevwxžŸ€kaB#QR >‚›1st;
¡¢£¤¥¦#
§¨™©ª›1”˜«Y?›vwx`Ua¬­®+Y¯°stR±²¯q³jk
a¥¦€ka#´`§¨`Uaµ¶·¸„¹ [›stPvwx¬?›vwx4­®+
\·¸±q€stka¥¦º³jka#
»¼
n½QR>¾¿NOÀÁ€Â{»¼n„#€d­®Ã¢ÀÁ»¼Ä@#
Â{»¼n„@Å\Ƙ ÇÈ·¸ÉÊBË¿»¼PÌÍRÎÏÐÑ
1қ1`Uaµ¶+Ós€PÔº›1ÕÖ”`Uar×ÕÖst./opØÙ#
2қÈÚ¢Ä@§ÑÛÜ¢(²cÝÞßÂ{|à/QRÔºáj#
\»¼Þßâstãä ?›Þßå+p—€d»¼#Ü Y»¼R±­®æç›1n
½àRà/躻¼éßêë/Â{ìstuvw#
í™v/‘’
ï
1ÒTCPð¾“
(1)Ґ‘’£Uñ°:.
(2)ÒåÓsst竺àñ°dRY+€dÉò×#
(3)Òåóªôõ
ö÷øè“'(#
(4)Òí™v£Usocketñ°í™v.
(5)Ò홾£UÂ{ú'(
(6)Ò“'(º>û\ ‘£Uacceptü›1ý í™°“
#
(7)қþí™vèº>ÿ



:
2!UDP"#$%&
(1)!'(#$
(2)!)*bind+,-./#$0123IP
(3)!45678listen0accept7,95:;
(4)!<=
>:.
:.
"socket#$
@ABCDEFGHI4/JK+MNOPWin32QRsocketSTU8TCP0UDP
VWXY
0K,Z[\TCP0 ]>
[cpp]viewplaincopy
1.
2.^_`
e--]OPTCP
4.gh>’
5.]j8888
>peter
7.***************************************************/
8.#include<>
9.#include<>
10.#pragmacomment(lib,")
11.
(intargc?char*argv[])
13.{
;
=MAKEWORD(2,0);op-qr
16.::WSAStartup(sockVersion,&wsaData);ostwinsockdll
'#$OPTCP
=>>socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)v
(s==INVALID__SOCKET)
20.(
("error");
22.::WSACleanup();owxyz{|
;
24.}
25.
;
=AF_INET;
=htons(8888);o]j8888
=INADDR_ANY;ogh}~€~‚gh
,-socket
(::bind(s,(LPSOCKADDR)&sin?sizeof(sin))==SOCKET_ERROR)
32.{
("error");
34.>:WSACleanup();owxyz{|
;
36.}
ƒ„socket
(::listen(s,2)==SOCKET_ERROR)
39.{
("error");
41.>:WSACleanup();oyz{|
;
43.}:.
44.
;
=sizeof(remoteAddr);
;
[]="peterAn”;o…†‡
49.
(l)
51.{
52./"accept]U878+tˆ‰Š‹:;8 ŒŽ‚ ]T
€E./g
‘’“Œ‚ ]BCT€”\•–“—˜™š’.›:;*/
=::accept(s^(SOCKADDR*)&remoteAddr,&nAddrLen);
(client==INVALID_SOCKET)
56.{
("error");
;
59.)
60.
("’ž/>%s\r\n'\inet_ntoa());
62.
63.::send(client,szText>strlen(szText)^0);o<=
64.
65.::closesocket(client);oŸ #$
66.}
67.
68.::closesocket(s);
69.::WSACleanup();
;
71.}
[cpp]viewplaincopy
[/**************************************************
2.^_`
e-- ]OPTCP
4.gh>’'
5.]j8888
>peter
7.***************************************************/
8.#include<>
9.#include<>
10.#pragmacomment(lib,"')
11.
(intargc,char+argv[])
13.{
;