您好,欢迎访问三七文档
1NetworkProgrammingTCPsocket&UDPsocket2SocketProgrammingwithWindowsOS1982-BerkeleySoftwareDistributionsintroducedsocketsasaninterfaceforcommunicationbetweenlocalprocesses1986-BerkeleyextendedthesocketinterfaceforuseovertheTCP/IPwithUNIXTodaymanyapplications(FTP,Telnet,etc)dependontheseinterfaces3SocketProgrammingwithWindowsOSSocketaprogramminginterfacealogical,filehandlelike,constructthatanapplicationusesforcommunication(everythinginUnixisafile)notrestrictedtoTCP/IP4WinSockDerivedfromBerkeleySockets(Unix)includesmanyenhancementsforprogramminginthewindowsenvironmentOpeninterfacefornetworkprogrammingunderMicrosoftWindowsAPIfreelyavailableMultiplevendorssupplywinsockSourceandbinarycompatibilityCollectionoffunctioncallsthatprovidenetworkservices5SocketProgrammingwithWindowsOSCommunicationprotocolsconnectionoriented(TransmissionControlProtocol-TCP/IP)connectionless(UserDatagramProtocol-UDPandInter-networkPacketExchange-IPX)6SocketProgrammingwithWindowsOSMicrosoftproposedanindustrywidesocketstandardforWindowsOS,calledasWindowsSocketInterfaceorWinSock.WindowssocketbasedapplicationsusetheWinSockinterfacetoaccessthedefaultWindowsWinSockimplementation,WinSock.dlloranalternativeimplementationsuchas,theFTPWinSock.dll7WinSock.dllFTPWinSock.dllTCP/IPIPXAppleTalkNetBIOSRemoteAccessService(RAS)FTPTCP/IPModemNetworkDriversLANApplicationWindowsSocket,ProtocolsandApplicationsPhoneLine8DifferencesBetweenBerkeleyandWinSockSocketisanintdatatypeinBerkeley,butaSOCKETdatatypeinWinSockSOCKET_ERRORisproducedbyallWinSockfunctions,butnegativeone(-1)inBerkeleyApplicationsmustcallWSAStartup()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.1InitializeWinsock10WinsockDLLIfcallWinsockfunctionsbeforeuploadingWinsockDLL,SOCKET-ERRORwillbereturned.UploadingWinsockDLLbycallingWSAStartupintWSAStartup(WORDwVersionRequested,LPWSADATAlpWSAData);wVersionRequestedWinsockDLLversionX(highorder):sub-versionY(loworder):mainversionMAKEWORD(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());}}13TCPSocketsProgrammingCreatingapassivemode(server)socket.Establishinganapplication-levelconnection.Client/Serverhandshakingbeforesendingorreceivingdataclientmustexplicitlyconnecttoserverservermustexplicitlyacceptclientclientwillnotpassconnect()untilserveracceptsclientserverwillnotpassaccept()untilclientconnectstoserverSend/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);familyisaddressfamilyAF_INET//internetprotocolsAF_UNIX//unixinternalprotocolsAF_NS//XeroxNSprotocolsAF_IMPLINK//InterfaceMessageProcessortypeisSOCK_STREAM//streamsocketSOCK_DGRAM//datagramsocketSOCK_RAW//rawsocketprotocolisusuallyzeroinapplicationsprogramming18intstatus=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()calladdrispointertoasockaddr_instructurethatcontainstheserverIPaddressandportnumberstructsockaddr_inshortsin_family//addressfamilyu_shortsin_port//portnumberstructin_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
本文标题:winsock
链接地址:https://www.777doc.com/doc-2081822 .html