标签: go-back-n

Go-Back-N窗口大小

为什么TCP的Go-Back-N算法窗口大小(N)必须小于序列号空间(S):S> N?我试着弄清楚自己,但不要安静得到它

algorithm networking tcp go-back-n

12
推荐指数
1
解决办法
2万
查看次数

数据报套接字在我的UDP程序中饿死其他线程

作为课程作业的一部分,我们的任务是在UDP层上提供额外的可靠性层,以便发送大图片文件.这是使用Go-Back-N协议完成的:http://en.wikipedia.org/wiki/Go_back_N

根据我的理解,这个问题的关键在于能够发送数据包,同时检查是否有任何致谢已经进入旧数据包,这将允许您移动窗口.

我目前通过两个线程执行此操作:如果窗口中有空间,则发送下一个数据包; 并且不断地听取任何传入的确认并做出适当的反应.

我的问题是该程序应该是线程化的,就好像这两个线程同时动作一样,但事实上,似乎ACKReceiver线程正在获得非常不成比例的时间.从线程转储中,当它到达DataSocket.receive()行时,它似乎"饿死"了发送线程一段时间,阻止了执行,而没有让其他线程有机会在此期间运行.

我已经看过以下问题,似乎暗示问题与DatagramSocket.receive同步的事实有关......但是没有提供问题的可用解决方案:

Java线程不会在I/O操作上暂停

这是我的代码的发件人部分的代码,我相对确定另一方的接收器是完全正常的(一方面,我没有必要使用任何线程来使其工作!):

import java.io.*;
import java.net.*;
import java.nio.ByteBuffer;

public class Sender3 {
    short base = 0;
    short nextSeqNum = 0;
    DatagramPacket[] packets;
    ByteBuffer bb;
    String endSys;
    int portNum;
    String fileName;
    int retryTime;
    int windowSize;
    DatagramSocket clientSocket;
    InetAddress IPAddress;
    boolean timedOut = false;

    public Sender3(String endSys, int portNum, String fileName, int retryTime, int windowSize){
        this.endSys = endSys;
        this.portNum = portNum;
        this.fileName = fileName;
        this.retryTime = retryTime;
        this.windowSize = windowSize;
    }

    public static …
Run Code Online (Sandbox Code Playgroud)

java multithreading udp go-back-n

3
推荐指数
1
解决办法
2379
查看次数

标签 统计

go-back-n ×2

algorithm ×1

java ×1

multithreading ×1

networking ×1

tcp ×1

udp ×1