1

ループ内にある次のコードがあります(簡略化)。cscclocalhost 上のサーバーに接続するクライアント ソケットです。サーバーはクライアントに 1 文字を送信します。しかし、うまく受信できていないようです。プロトコルは TCP です。

    rect, _, st = socket.select({cscc}, nil, .5)

    if(rect[cscc] ~= nil) then
        data, err, part = csc:receive(512)
        if(part ~= nil) then
            print(err.." : "..part)
        end
        socket.sleep(1)
    end

文字がサーバーから送信されると、出力として次の行が繰り返されます。

timeout :

明らかに、ここでは part は null ではありません。ここで何が起こっているのですか?同じものを何度も受け取るのはなぜですか?

4

2 に答える 2

2

おそらく、サーバーは実際にはデータをまったく送信できませんでした。が空partでないかどうかを確認し、3 番目のパラメーターを に渡さないとどうなるかを確認しますsocket.select

于 2013-05-09T22:54:28.550 に答える
0

LuaSocket リファレンス ドキュメントには次のように書かれています。

「エラーが発生した場合、メソッドは戻りnil、操作中にタイムアウトが発生した場合は文字列 'closed' [...] または文字列 'timeout' のエラー メッセージが続きます。また、エラー メッセージの後に、関数は送信の部分的な結果を返します。」

空の文字列は「部分的な結果」としてカウントされます。


に対してテストしてみてください(part and #part > 0)。これにより、その部分が非であることを確認し、nil実際にバイトが含まれているかどうかを確認します。

netcatサーバーが期待するデータを実際に送信していることを確認するために、または類似のものをチェックすることも価値があるかもしれません。

于 2013-08-28T00:07:09.663 に答える