我需要为我的课程工作实现完全去中心化的令牌环协议应用程序。所以,这里是:
每个启动的应用程序(节点)都有自己的 ID,当前节点是上一个节点的服务器和环中下一个节点的客户端(因此,节点之间有 2 个并行 tcp 连接)。用户输入当前节点的端口,IP地址和其他服务器节点的端口,数据包(令牌),节点的当前ID和目标ID
我不知道如何将收到的令牌发送到环中的下一个节点。我怎样才能实现 2 个 tcp 连接?我尝试为每个节点启动 2 个线程(1 个用于服务器功能,1 个用于客户端),但我认为这是错误的方式。
我还为«client»和«server»实现了2个功能。
服务器:
/*some code...*/
if (server.Pending()) {
/*...some code*/
NetworkStream stream = client.GetStream();
int i = stream.Read(bytes, 0, bytes.Length);
if (i > 0) {
recv = /*some code*/
Invoke(AddTextDelegateS, "Someone connected. Waiting for mine token...");
answer = /*some code*/
//extracting destination node ID
int dest_new = /*some code*/
dest_id = dest_new;
if (current_id == dest_id) {
// OK, token received right node
Invoke(AddTextDelegateC, "Node with id " + current_id.ToString() + " recieved token with data:");
Invoke(AddTextDelegateC, recv);
} else {
//in this part I'm trying to send <------------
Thread tmp_thread = new Thread(startclient);
tmp_thread.IsBackground = true;
tmp_thread.Start();
//
}
byte[] answer_bytes = /*some code */
stream.Write(answer_bytes, 0, answer_bytes.Length);
/*....*/