现在的位置: 首页 > 综合 > 正文

socket编程

2013年09月06日 ⁄ 综合 ⁄ 共 1107字 ⁄ 字号 评论关闭

 

 

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

 

 

1  调用WSAStartup函数,判断系统所支持的winsock版本,初始化winsock的dll。对于WSACleanup(),在DLL内部维持着一个计数器,只有第一次调用WSAStartup才真正装载DLL,以后的调用只是简单的增加计数器,而WSACleanup函数的功能则刚好相反,每调用一次使计数器减1,当计数器减到0时,DLL就从内存中被卸载!因此,你调用了多少次WSAStartup,就应相应的调用多少次的WSACleanup。

 

2 创建套接字,有两个函数,socket和WSASocket,前者是标准,后者是微软的扩展

 

3 对于客户端,下一步就是连接服务器,建立连接需要两个函数:connect和WSAConnect。前者是标准的Socket函数,后者是微软的扩展函数。

 

4 发送和接受数据。由于这里建立的是SOCK_STREAM类型的连接,故发送可以采用的函数有send和WSASend,而接收可以采用recv和WSARecv同样,全小写的函数是标准的Socket函数以WSA开头的是微软的扩展函数。

 

5 断开连接。

 

需要添加的头文件

 

#include <winsock2.h>

#pragma  comment(lib,"ws2_32.lib")

 

 

 

以上是客户端 ,对于服务器端,前两步是一样的,从第三步开始不同

 

 3  bind

接下来我们要指定一个位址及 port  Server 的这个 socket,这样 Client 才知道待会要连接哪一个位址的哪个 port;所以我们呼叫 bind() 函式。

 

listen

指定完位址及 port 之後,我们呼叫 listen() 函式,让这个 socket 进入监听状态。一个 Server 端的 TCP socket 必须在做完了 listen 的呼叫後,才能接受 Client 端的连接。

 


抱歉!评论已关闭.