文档介绍:该【【网络编程】之一、初识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"# yx"#
IpWSAData8sWSADataNs,WSAStartup
NEuabWinsockefJ
D
IpWSAData8sWSADataNs WSAStartup
NEuabWinsock
efJD
[cpp]viewplaincopy
2.{
;wVersion*i3-Winsock"#y
;//wHighVersionabWinsockefD;<="
#
5.
U=vwx"# zvw"#
[WSADESCRIPTION_LEN+1];
[WSASYS_STATUS_LEN+1];Sp"#
Winsock -
;ISockets,u ¡¢{3-£0¤
¥
;//iMaxUdpDg¦§¨©
*IpVendorlnfo;Winsockª«¬­®¯°
WindowsI±²-.
12.}WSADATA,*LPWSADATAr:.
´*3-µWinsock¶ !·-S¸Ku¹-¤¥º»¼½Z
intWSACIeanup(void);
12·-¸gh¾±²¿À ÁÂÃÄÅÆeiu¼½ KL¢^8WSAStartup·-Ç
L8WSACIeanup·-.
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
AFJNET6ZIPV6r
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_|_}~
&sockett
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;">AFNET</span>
;//<spanstyle="color:rgb(51,51,51);font-family:Aria
1;font-size:14px;line-height:26px;”ijk</span>
;
10charsin_zero[8];
11.};
lsajamily/^OTCP/IP+,BCAFJNETo(TCP/IPt
BC'(sockaddrjnO
sin_addr\sin_addrads_addr,TIP/^
[(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*OPr4styz
$
len*yzS$
flags*TTO{0*
*OPVsendSocketDERSyz
@
 z¡¢£¤¥¦T§¨D©Bª«¬­®T¯°±SocketYSOCKET_ERROR
[cpp]view,pledpcopy
(
,
*buf,
,
6.)$
op-<=q-./0r4stu4recv5TCP²wx::.
S:f
xRSZ[\$
buf*f´µP
T±
4vrecv¶$
len*f´buf·¸$
flags*TTO{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!"#$%&'()*+,-./-#
0123456789:8;+ 5<9:=8>?,-;***@A9
:B#
456789:8;+?5CDB9EFGA7H 8;+I/
7B9:JKL#
+32MNOPQRSTUVW+;XTUPY?ZY[1TUP
\];^_`Uabc)*X];ATUdefCPU-#
ga
;XhijP;Xgkalmn#
opqwinsockrIPstuvwxyIuz{|winsockIPstuvwx}~
ka?]
Bsockaddr_in?1nPIPstuvw;
sin_family
#
1`Ua‘-'r`vw>u[j>KY
vwgetservbynamevwxkaB#QR >1st;
¡¢£¤¥¦#
§¨©ª1«Y?vwx`Ua¬­®+Y¯°stR±²¯q³jk
a¥¦ka#´`§¨`Uaµ¶·¸¹ [stPvwx¬?vwx4­®+
\·¸±qstka¥¦º³jka#
»¼
n½QR>¾¿NOÀÁÂ{»¼n#d­®Ã¢ÀÁ»¼Ä@#
Â{»¼n@Å\Æ ÇÈ·¸ÉÊBË¿»¼PÌÍRÎÏÐÑ
1Ò1`Uaµ¶+ÓsPÔº1ÕÖ`Uar×ÕÖst./opØÙ#
2ÒÈÚ¢Ä@§ÑÛÜ¢(²cÝÞßÂ{|à/QRÔºáj#
\»¼Þßâstãä ?Þßå+pd»¼#Ü 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.{
;