Socket系列(二)基于Socket网络通讯的服务端和客户端程序设计

        Socket系列一主要介绍了Socket的基础知识、工作原理以及与传统的http协议的区别。这部分内容的目的是为本文做铺垫。本文将介绍基于Socket网络通讯的服务器端和客户端的程序设计。

一、服务器端的程序设计

        关于Socket服务器端的内容,在这里只提供设计思路,以及相应的测试界面,不提供具体的代码。系列一中有提到,Socket服务器端的程序编写流程大概有创建套接字(socket)、服务绑定(bind)、服务侦听(listen)、处理新到连接(accept)、数据收发(rec/send)、关闭套接字(close)几个部分。接下来,将介绍如果将这几个部分连接到一起,开发一个完整的Socket服务器端程序。主要步骤如下:

        首先,创建一个套接字,绑定IP和端口号,并设置监听数为10(代表同时最大连接数量);

        其次,因为我用的是Winform写的测试程序,所以创建一个后台线程,在线程中等待客户端的连接请求;

        接着,当接收到请求后,同样创建一个后台线程,在线程中,接收来自此客户端的消息,并将该Socket保存到队列中。另外还需创建和各个客户端的心跳包;

        然后,如果服务端想要推送消息给客户端,可从队列中找出要发送的客户端对象,如果存在该连接,即可实时推送内容到客户端;

        最后,若想关闭某一连接,执行close即可;

        服务端简略效果图,如下所示:

Socket系列(二)基于Socket网络通讯的服务端和客户端程序设计

一、客户端的程序设计

        关于Socket客户端的内容,系列一中有提到,Socket客户端的程序编写流程大概有:客户端套接字创建(socket)、发起连接(connect)、数据收发(rec/send)、关闭套接字(close)几个部分。接下来,将介绍如果将这几个部分连接到一起,开发一个完整的Socket客户端程序。主要步骤如下:

        首先,创建一个客户端套接字,设置服务端提供的IP和端口号;

        其次,通过connet与服务端建立连接;

        接着,当建立连接后,创建一个后台线程,在线程中,接收来自此服务端推送的实时消息,并将该Socket保存;

        然后,如果客户端想要发送消息给服务端,如果该连接没有断开,即可通过该Socket实时发送内容到服务端;

        最后,若想关闭该连接,执行close即可;

        客户端简略效果图,如下所示:

Socket系列(二)基于Socket网络通讯的服务端和客户端程序设计