想实现一个有网络数据转发功能的软件,能够实现将主机A发送的数据转发到若干个主机B中,具体要求如下:
1.软件作为TCP Server端,在TCP端口7000上监听,主机A作为TCP Client会自动连接软件的7000端口,连接成功后会通过socket链接向软件源源不断的发送数据。
2.软件作为TCP Server端,同时在TCP端口8000上监听,有若干个主机B作为TCP Client会自动连接软件的8000端口,连接成功后,等待接收主机A向其发送数据。数据转发软件要实现如下功能:
1.将主机A发送的数据转发给若干个已建立连接的主机B,也就是说,一旦主机B连上了软件的8000端口,则软件就将主机A发送的数据转发给主机B,即一个主机A发送,若干个主机B接收!通过软件中转来实现将主机A的数据分发到若干个主机B的功能!请问,转发软件的工作模型我应该如何设计?
我的大致思路是在内存建立一个缓冲区,将主机A发送的数据源源不断的放到此缓冲区中,然后一旦有主机B与软件的8000端口建立TCP连接,就从该缓冲区中读取数据并发送给主机B。
但涉及到收发线程同时读写缓冲区的问题,以及数据以什么样的方式放到缓冲区,又以什么样的方式从缓冲区中读取?
1.软件作为TCP Server端,在TCP端口7000上监听,主机A作为TCP Client会自动连接软件的7000端口,连接成功后会通过socket链接向软件源源不断的发送数据。
2.软件作为TCP Server端,同时在TCP端口8000上监听,有若干个主机B作为TCP Client会自动连接软件的8000端口,连接成功后,等待接收主机A向其发送数据。数据转发软件要实现如下功能:
1.将主机A发送的数据转发给若干个已建立连接的主机B,也就是说,一旦主机B连上了软件的8000端口,则软件就将主机A发送的数据转发给主机B,即一个主机A发送,若干个主机B接收!通过软件中转来实现将主机A的数据分发到若干个主机B的功能!请问,转发软件的工作模型我应该如何设计?
我的大致思路是在内存建立一个缓冲区,将主机A发送的数据源源不断的放到此缓冲区中,然后一旦有主机B与软件的8000端口建立TCP连接,就从该缓冲区中读取数据并发送给主机B。
但涉及到收发线程同时读写缓冲区的问题,以及数据以什么样的方式放到缓冲区,又以什么样的方式从缓冲区中读取?
我举得可以建立个结构体用来保存每次穿过来的数据,结构体又可以加入一个动态数组中管理。
前提是要知道这若干个客户端B的信息,至少是数量(如果连有多少个客户端都不知道那就麻烦了,数据一至在服务器的数组中又不能卸载,最后会由于内存耗尽导致崩溃)结构体中还应该包含一个计数器的字段,用来记录结构体中的数据被发送了几次,每发送一次则++,直到达到B的数量之后就同时把两个数组中的内容卸载掉。关键的问题就是多线程调用的时候临界区互斥要做好。
呵呵,菜鸟想法,极度不成熟,还是期待高手吧。