WinSock API编程通用的操作步骤

学习Socket编程,看到书上写得某些地方写得挺好,就敲写来留着以后看

1

Winsock的打开(使用WSAStartup()来实现)

因为WinSock的服务是以动态链接库形式来实现的,因此必须首先对 WinSock  DLL进行初始化,通过调用WSAStartup()便可以检测系统中有没有一个或者多个Windoows Socket的实现,该函数必须是应用程序或DLL调用的第一个Windoows Socket函数,应用程序或DLL只有在一次成功的WSAStartup()调用之后,才能够进一步调用其他的 WinSock API函数

 

2

建立套接字(socket()或WSASocket()

应用程序在使用套接字通信之前,必须拥有一个套接字,在WinSock中,要使用socket()或者WSASocket()函数为网络程序创建一个套接字。在客户端和服务器都可以调用socket函数来建立一个套接字,两者的区别是是客户端的套接字可以调用bind函数,由用户自己来指定IP地址以及port号,但也可以不调用bind()函数,有Winsock自动设定IP地址以及port

 

3

地址绑定(bind())

当调用socket()函数创建一个套接字后,该套接字还是不能直接使用的,因为它存在于一个名字空间(地址簇)中,只确定了通信所希望的服务类型,并没有与该机上提供服务的某个端口联系在一起,这样的套接字称为未命名套接字。bind()函数通过一个未命名套接字分配一个本地名字从而为它建立本地绑定(即把一个套接字与一个主机地址和端口号联系起来)

一种是数据报:通信双方都必须进行地址绑定

一种是流式套接字应用:一个服务器对应多个客户端,无需识别每一个客户端,但子客户端必须清楚自己想要连接的服务器地址,因此服务器端需要绑定地址,而客户端不需要

 

4

服务器监听连接(listen()

当在服务器端成功创建一个套接字,并调用bind()函数和一个指定的地址绑定之后,就要指示该套接字进入监听连接请求的状态,可以接受客户端发出的请求,调用函数Listen()

 

(5)

客户端提出申请连接(connect()或WSAConnect())

客户端期初请求后,如果服务器端能接收则会建立连接

 

6

数据的发送(sned()WSASend()sendto()WSASendTo())

对于流式套接字:若要从套接字上发送一个数据包,就要用send()或WSASend()函数

对于无连接的数据报套接字:使用sendto()WSASendTo()函数

注意:一般编程只在同种套接字之间传递信息,不同类的套接字是无法通信的!!!

7

数据的接收(recv()或WSARecv(),recvfrom()或WSARecvfrom())

对于流式套接字:若要从套接字上发送一个数据包,就要用recv()或WSARecv()函数

对于无连接的数据报套接字:使用recvfrom()或WSARecvfrom()函数

 

8

关闭套接字(closesocket())

不再使用套接字时就要及时关闭,关闭CS之间的连接只需在其中一段调用这个函数就行了

 

9

关闭WinsockWSACleanup())

 

不再调用其他的 WinSock API函数时就必须调用WSACleanup()将应用程序从Windows Socket的实现中注销,释放资源,多少次调用WSAStartup(),就要多少次调用WSACleanup()

 


你可能感兴趣的:(编程)