首页 > 代码库 > 记一个网络传输功能的实现过程

记一个网络传输功能的实现过程

写在前面的话:功能是基于C/S模型的网络传输实现,要求是服务器端可以在局域网中任何机子上运行,客户端启动后自动寻找服务器端进行连接,之后,服务器端向已经连接的客户端发送命令,客户端根据命令执行相应的操作(即发送某个约定文件夹下的所有文件),并且客户端不需要用户操作。

1、思路

首先,对于这个功能的实现思路如下,因为服务器不确定在哪个机子上,所以为了寻找到服务器端,客户端需要发送广播消息,并且为了维护客户端在线,广播消息需要实现成心跳包(即定时发送广播消息)。服务器监听心跳包,如果是新加入的客户端,则更新用户列表,否则不做处理。这是维护在线,离线的实现还在考虑中。

第二,当服务器端发送命令给客户端时,客户端根据命令来决定发送哪个文件夹中的文件给服务器端,由于文件夹下可能有多个文件,所以需要有个循环,循环发送每个文件。我的处理时在发送前先发送即将发送的文件个数,之后循环发送每个文件,在每个文件的发送过程中,首先发送文件名,之后发送文件长度,最后循环发送文件内容。当然服务器端接受的时候也需要按这个顺序来接收。

2、实现

客户端:

开启一个线程来发送心跳包,每发送一个心跳包,就睡眠3S,接着发送下一个,如此循环,心跳包采用UDP套接字来发送。

当接受命令时,客户端转换为C/S模型中的服务器端,因此客户端需要开启一个线程来监听固定端口,接受服务器端发送来的命令,之后根据命令执行相应的操作。

服务器端:

开启一个线程监听UDP心跳包。根据心跳包的IP地址判断是否做处理。

当点击发送命令按钮时,开启一个线程连接选中的客户端,发送命令并接收数据。

3、碰到的问题

首先,客户端的监听,