winsock

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1NetworkProgrammingTCPsocket&UDPsocket2SocketProgrammingwithWindowsOS1982-BerkeleySoftwareDistributionsintroducedsocketsasaninterfaceforcommunicationbetweenlocalprocesses1986-BerkeleyextendedthesocketinterfaceforuseovertheTCP/IPwithUNIXTodaymanyapplications(FTP,Telnet,etc)dependontheseinterfaces3SocketProgrammingwithWindowsOSSocketaprogramminginterfacealogical,filehandlelike,constructthatanapplicationusesforcommunication(everythinginUnixisafile)notrestrictedtoTCP/IP4WinSockDerivedfromBerkeleySockets(Unix)includesmanyenhancementsforprogramminginthewindowsenvironmentOpeninterfacefornetworkprogrammingunderMicrosoftWindowsAPIfreelyavailableMultiplevendorssupplywinsockSourceandbinarycompatibilityCollectionoffunctioncallsthatprovidenetworkservices5SocketProgrammingwithWindowsOSCommunicationprotocolsconnectionoriented(TransmissionControlProtocol-TCP/IP)connectionless(UserDatagramProtocol-UDPandInter-networkPacketExchange-IPX)6SocketProgrammingwithWindowsOSMicrosoftproposedanindustrywidesocketstandardforWindowsOS,calledasWindowsSocketInterfaceorWinSock.WindowssocketbasedapplicationsusetheWinSockinterfacetoaccessthedefaultWindowsWinSockimplementation,WinSock.dlloranalternativeimplementationsuchas,theFTPWinSock.dll7WinSock.dllFTPWinSock.dllTCP/IPIPXAppleTalkNetBIOSRemoteAccessService(RAS)FTPTCP/IPModemNetworkDriversLANApplicationWindowsSocket,ProtocolsandApplicationsPhoneLine8DifferencesBetweenBerkeleyandWinSockSocketisanintdatatypeinBerkeley,butaSOCKETdatatypeinWinSockSOCKET_ERRORisproducedbyallWinSockfunctions,butnegativeone(-1)inBerkeleyApplicationsmustcallWSAStartup()beforecallinganyWinSockfunctions,andshouldcalltheWSACleanup()functionbeforeterminating9voidmain(void){/*ThefollowingtwolinesneededforWindow'ssocket*/WORDwVersionRequested=MAKEWORD(1,1);/*StuffforWSAfunctions*/WSADATAwsaData;/*StuffforWSAfunctions*//*Thisstuffinitializeswinsock*/WSAStartup(wVersionRequested,&wsaData);/*Createasocket*/My_SocketID=socket(…..);Step1:Defineyoursocket(uploadWinsockDLL)Step2:InitializeyoursocketStep3:StartusingitWinsockversion1.1InitializeWinsock10WinsockDLLIfcallWinsockfunctionsbeforeuploadingWinsockDLL,SOCKET-ERRORwillbereturned.UploadingWinsockDLLbycallingWSAStartupintWSAStartup(WORDwVersionRequested,LPWSADATAlpWSAData);wVersionRequestedWinsockDLLversionX(highorder):sub-versionY(loworder):mainversionMAKEWORD(X,Y)givesthecorrectwVersionRequestedvalue11Afteryoucall“closesocket”functionbutbeforeyourprogramisterminated/*Thisstuffcleans-upwinsock*/WSACleanup();Clearwinsock12#includewinsock2.h//包含Winsock头文件voidmain(void){WSADATAwsaData;//初始化Winsock版本2.2if((Ret=WSAStartup(MAKEWORD(2,2),&wsaData))!=0){printf(WSAStartupfailedwitherror%d\n,Ret);return;}//在这里开始进行Winsock通信编程//当应用结束时调用WSACleanupif(WSACleanup()==SOCKET_ERROR){printf(WSACleanupfailedwitherror%d\n,WSAGetLastError());}}13TCPSocketsProgrammingCreatingapassivemode(server)socket.Establishinganapplication-levelconnection.Client/Serverhandshakingbeforesendingorreceivingdataclientmustexplicitlyconnecttoserverservermustexplicitlyacceptclientclientwillnotpassconnect()untilserveracceptsclientserverwillnotpassaccept()untilclientconnectstoserverSend/receivedata.Terminatingaconnection.14“*”indicatesablockingfunctioncall.SERVERbind()listen()accept()recv()CLIENTsocket()connect()send()close()socket()***1:ConnectionRequest2.Sendacommand3.Receivetheresultrecv()send()*Formatoftimestamp:“HH:MM:SS”ClientID#1digitinteger15socket()functionunsignedintsocket_id=socket(AF_INET,SOCK_STREAM,0);“AF_INET”=UseIPprotocol“SOCK_STREAM”=UseTCPReturnssocketIDonsuccessAlways016BasicSocketCalls(socket)SOCKETsocket(intfamily,inttype,intprotocol);17socket(continued)SOCKETsocket(intfamily,inttype,intprotocol);familyisaddressfamilyAF_INET//internetprotocolsAF_UNIX//unixinternalprotocolsAF_NS//XeroxNSprotocolsAF_IMPLINK//InterfaceMessageProcessortypeisSOCK_STREAM//streamsocketSOCK_DGRAM//datagramsocketSOCK_RAW//rawsocketprotocolisusuallyzeroinapplicationsprogramming18intstatus=bind(socket_id,(structsockaddr_in*)my_addr,sizeof(my_addr));Thesockaddr_instructuretospecifyport#andIPaddressofthismachine(servermachine)ThebytesizeoftheSockaddr_instructureReturncode(0iferror)SocketIDreturnedbysocketfunctionBind()function19BasicSocketCalls(bind)intbind(SOCKETsockfd,structsockaddr*addr,intaddrLen);20bind(continued)intbind(SOCKETsockfd,structsockaddr*addr,intaddrLen);sockfdwasreturnedfromthesocket()calladdrispointertoasockaddr_instructurethatcontainstheserverIPaddressandportnumberstructsockaddr_inshortsin_family//addressfamilyu_shortsin_port//portnumberstructin_addrsin_addr//IPaddress(32-bits)addrLen-sizeof(structsockaddr_in)21structsockaddr_inmy_addr;/*My(client)Internetaddress*//*SetMy(client's)IPAddress----------------------------------------*/my_addr.sin_family=AF_INET;/*AddressFamilyToBeUsed*/my_addr.sin_port=htons(MY_PORT_NUM);/*Portnumbertouse*/my_addr.sin_addr.s_addr=htonl(INADDR_ANY);/*MyIPaddress*/Step1:YouinstantiatethestructureStep2:Fillupthecomp

1 / 69
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功