欢迎来到天天文库
浏览记录
ID:41033683
大小:19.46 KB
页数:5页
时间:2019-08-14
《黑客编程点滴小结word》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、1.3Winsock编程1.31用Winsock实现网络通信其实Winsock编程接口就是微软提供的一系列API函数,所以在调用函数之前包含其头文件Winsock2.h。由于VC++6.0默认没有连接这下函数的导入库文件,所以还需要添加到WS2-32.lib的连接,具体命令如下:#include#pragmacomment(lib,”ws2_32,lib”)一个经典的服务器端和客户端用WinsockAPI实现TCP通信的过程,由于Winsock库没有被VC++6.0默认装载,所以在调用Winsock函数之前必须装载Winsock库,否则将会返回
2、SOCKET_ERROR错误。调用WSAStartup函数初始化WSA,其原型如下:IntWSAStarup(WORDwVersionRequested,LPWSADATAipWSADATA);解释:wVersionRequested参数用来指定想要加载Winsock库的版本。IpWSADATA参数指向一个LPWSADATA结构指针,用来保存WSAStarup函数返回的Winsock库的的版本信息。此函数调用成功返回0,失败可调用WSAGetLastError函数确定原因。装载Winsock库的代码如下:WSADATAwsaData;WORDsockVersion=M
3、AKEWORD(2,2);If(WSAStartup(sockVersion,&wsaData)!=0)Return0;注释:MAKEWORD函数:在上面的代码中调用了MAKEWORD函数,这是一个宏,它的作用是将俩个byte型合并成一个word型,但不是相加,而是一个在高8位,一个在低8位。什么是套接字?套接字可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入套接字中,该套接字将这段信息发送到另一个套接字中,是这段信息能传送到其他程序。Socket函数的原型如下:SOCKETsocket{Intaf;Inttype;Intprotocol}解释:af
4、参数用来指定套接字使用的地址格式,这里只能用AF-INET。Type参数用来指定套接字的类型。具体类型如下:SOCK_STREAM(stream):流套接字,使用TCP提供有连接的可靠传输。SOCK_DGRAM(dgram):数据报套接字,使用UDP提供无连接的不可靠的传输。SOCK_RAM(ram):原始套接字,Winsock接口并不使用某种特定的协议去封装它,而是由程序自行处理数据报和协议首部,由于这里是TCP通信,所以选择SOCK_STRAM.PROTOCOL是配合type使用的,用来指定协议类型。这里是TCP通信,所以使用IPPROTO_TCP;假如是UDP通
5、信,那么就是IPPROTO_UDP;其对应的type也应该是SOCK_DGRAM.当函数成功调用成功时返回一个新的SOCKET句柄,失败则返回INVALID_SOCKET。注释:什么是句柄?句柄实际上是一个Long(整长型)型的数据,它是Windows用来标识被应用程序所建立或使用的对象的唯一整数。Windows使用各种各样的句柄进行标识诸如:应用程序实例、窗口、控制、位图、GDI对象等等。形象地说,句柄就算是一个标识符,是拿来表示对象或者项目的。建立套接字,其代码:SOCKETsListen=socket(AF_INET,SOCK_STREAM,IPPROTO_TC
6、P);If(sListen==INVALID_SOCKET){printf(“socketerror”);Return0;}套接字已经建立,那么下一步就应该是绑定本地地址和端口等信息到套接字上。说明:客户端在建立套节后可以直接连接服务器端,不需要调用bind函数把本地地址和端口绑定到套接字上,因为在调用connect函数后会自动绑定,当然端口是随机的。Bind的函数的原型:Intbind(SOCKETs;ConststructsockaddrFAR*addr,Intnamelen);S参数是指向一个有效的套接字句柄,有socket函数返回。Addr参数指向要关联的
7、本地地址,这里是一个sockaddr结构,具体结构如下:Structsockaddr_in{Shortintsin_family;Unsignedshortintsin_port;Structin_addrsin_addr;Unsignedcharsin_zero[8];};解释:sin_family域必须设置为AF_INET.Sin_port域指定了tcp或udp通信服务的端口号。端口号范围:0—1023由IANA管理,保留为公共服务使用;1023—49151是普通用户注册的端口号;49152—65535是动态的端口号。为了避免和其他应用程序或者系
此文档下载收益归作者所有