SOCKET流式套接字编程总结

时间:2021-02-13 10:21:22

  这几天编写了一些简单的socket程序,在此,总结一些小小的经验,以便于刚刚接触到这一方面的同行交流感想,沟通体会,促进共同进步。

首先说流式套接字的客户端,相信写过这个程序的人都对socket几个基本过程不陌生,其实这个过程可以简单的分为几个模块,socket环境初始化(使用函数 WSAStartup(MAKEWORD(2,0),&wsData))我将这个过程理解成首先是进行热身,准备好实施环境;创建套接字socket(AF_INET,SOCK_STREAM,IPPROTO_TCP),这个过程可以理解成在上述已经初始化的环境下使用的一个对象,就好比是建立双方通信之前的一个插座,现在就是在本地建立一个插座;地址信息的处理:如下所示是目的端的地址信息处理过程

 sockaddr_in clientService;
 clientService.sin_family = AF_INET;
 clientService.sin_addr.s_addr = inet_addr(ipaddr);
 clientService.sin_port = htons(client_port);

在上述过程完成后,就相当于铺设线路,给准备通信的环境搭建起连接至外界网络的电话线;随后,就是将已经建立好的插座和线路连接起来,这样,就有了connect函数,

格式如下

connect(ConnectSocket,(SOCKADDR*)&clientService,sizeof(clientService))

这样,就实现了本地连接上网的功能;但是连上网了究竟进一步干什么呢?于是,就有了下一步传输和接受的操作,其中输出通常用函数send,这里就要指明通过哪个插座进行发送,因为本地建立的连接可能有好多个socket,因此,究竟是何哪一个服务端连接,所以在send函数中必须指明通过谁来发送。因为上述已经指明了本地的插座和相对应的服务器地址的连接,所以,就直接实现通过这个插座的发送就可以了。函数形式如下:

send(ConnectSocket,sendbuf,strlen(sendbuf),0)

最后,通过对函数的判断看看发送成功了没有,做一些梢尾工作。做完了这些工作后,简单的连接过程就实现了,但是申请socket的过程中,需要资源,需要环境支持,于是,就通过

closesocket(ConnectSocket)

关闭申请的资源,再通过

 WSACleanup()

就实现了环境的清扫。这样,客户端的处理就算完成了。

上述内容只是自己的简单体会,以供交流参考,还望大家多多指教!!!下一篇补上流式套接字服务器端