0

Texas Instruments のブースター パック cc3000 を使用してデータを送信しようとしています。したがって、ボードに TCP サーバーソケットを実装しました。保留中の接続を正常に受け入れ、指定されたソケットでデータを送受信できます。私のプロトコルでは、クライアントは応答を読み取った後に接続を閉じる責任があります。しかし、いくつかの送信の後、送信が遅くなります。Wireshark を使用して WLAN トラフィックを検査すると、ソケット クローズ手順に問題があることがわかります。私のクライアントは Java ベースのプログラムです。ボードはアドレス 100 を使用し、コンピューターは 102 で実行されます。

TCP ストリームは次のようになります。

 31 4.696711000    192.168.2.102         192.168.2.100         TCP      66     50721 > http-alt [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=4 SACK_PERM=1
 32 4.700359000    192.168.2.100         192.168.2.102         TCP      58     http-alt > 50721 [SYN, ACK] Seq=0 Ack=1 Win=1460 Len=0 MSS=1460
 33 4.700394000    192.168.2.102         192.168.2.100         TCP      54     50721 > http-alt [ACK] Seq=1 Ack=1 Win=17520 Len=0
 34 4.700461000    192.168.2.102         192.168.2.100         HTTP     55     Continuation or non-HTTP traffic
 35 4.705454000    192.168.2.100         192.168.2.102         TCP      54     http-alt > 50721 [ACK] Seq=1 Ack=2 Win=1460 Len=0
 36 4.705476000    192.168.2.102         192.168.2.100         TCP      57     [TCP segment of a reassembled PDU]
 37 4.709035000    192.168.2.100         192.168.2.102         TCP      54     http-alt > 50721 [ACK] Seq=1 Ack=5 Win=1460 Len=0
 38 5.194961000    192.168.2.100         192.168.2.102         TCP      58     [TCP segment of a reassembled PDU]
 39 5.196220000    192.168.2.100         192.168.2.102         HTTP     154    Continuation or non-HTTP traffic
 40 5.196244000    192.168.2.102         192.168.2.100         TCP      54     50721 > http-alt [ACK] Seq=5 Ack=105 Win=17416 Len=0
 41 5.196286000    192.168.2.102         192.168.2.100         TCP      54     50721 > http-alt [FIN, ACK] Seq=5 Ack=105 Win=17416 Len=0
 42 5.202194000    192.168.2.100         192.168.2.102         TCP      54     http-alt > 50721 [ACK] Seq=105 Ack=6 Win=1460 Len=0
138 24.245036000   192.168.2.100         192.168.2.102         TCP      54     http-alt > 50721 [FIN, ACK] Seq=105 Ack=6 Win=1460 Len=0
139 24.245060000   192.168.2.102         192.168.2.100         TCP      54     50721 > http-alt [ACK] Seq=6 Ack=106 Win=17416 Len=0

約 10 回の送信の後、FIN/ACK カスケードを取得します。上記の最後の FIN/ACK は、このカスケードの一部です。ソケットが完全に閉じられておらず、HW モジュールが開始され、すべてのソケットが連続して閉じられているように見えます。

    My Java - client does the following
    Socket b = new Socket("192.168.2.100",8080);
    OutputStream o = b.getOutputStream();
    o.write(10);
    o.write(0);
    o.write(0);
    o.write(0);
    o.flush();

    InputStream i = b.getInputStream();

    int id = i.read();
    int gId = i.read();

    int lengthA = i.read();
    int lengthB = i.read();
    int length = (lengthB<<8)|lengthA;
    if(length < 0|| length > 1000)
    {
        b.close();
        return;
    }

    System.out.println(new Date()+" GantryID: "+gId+" Package with id: "+id+" has length: "+length+" payload: ");

    DataInputStream ds = new DataInputStream(i);
    byte[] buffer = new byte[length];
    ds.readFully(buffer);       
    b.close();
    System.out.println(new String(buffer));

サーバーはもう少し複雑ですが、重要なコマンドは次のとおりです。

return recv(handle, data, size, 0); //Read request header
return recv(handle, data, size, 0); //Read request payload
send(handle, data, size, 0); //Write response header
send(handle, data, size, 0); //Write response payload
//No Close only set socket handle to -1

誰が何が起こっているのか考えていますか。助けやアイデアをいただければ幸いです。

4

0 に答える 0