1

私はしばらくの間 Google を検索してきましたが、ここにあるこの問題を解決するためのオファーはないようです。

作成した外部サーバーに接続する簡単な方法として LuaSocket を使用していますが、正常に接続して信号を送信できます。

しかし、後で 2 番目のメッセージを送信しようとすると、まだソケットに接続しているにもかかわらず、外部サーバーがメッセージを受信して​​いないようです。

socket = require("socket")
host, port = ip, port
tcp = assert(socket.tcp())
tcp:settimeout( 0 )

tcp:connect(host, port);

msg = {
    ["status"]="connect",
    ["usrName"]=username
}
msg = Json.Encode(msg)

tcp:send(msg); -- This message, the server received this message.


-- Later in my code, I attempt to send another message.

msg = {
    ["status"]="anotherMessage",
    ["usrName"]=username
};
msg = Json.Encode(msg) 
tcp:send(msg); -- This message is not sending, even though i'm still connected.
4

2 に答える 2

1

接続が開いている場合でも、単に読み取っていない可能性があるため、反対側で何が起こるかを示す必要があります。また、「メッセージが送信されていない」ときに正確に何が起こるかはわかりません。エラーが出ますか?スクリプトは終了しますが、メッセージは送信されませんか?

あなたが試すことができるいくつかのことがあります:

  • 動作するようになるまで、(デフォルトの) 同期送信に切り替えます。remove tcp:settimeout(0)、相手側がメッセージを読む準備ができていない場合、送信が「タイムアウト」メッセージで失敗する可能性があるためです。
  • 呼び出しからのエラー メッセージをチェックして、:sendタイムアウトになっているかどうかを確認します。

    local ok, err = tcp:send(msg)

  • socket.select送信するメッセージを相手側が受け入れる準備ができているかどうかを確認するために使用します。

于 2013-02-09T23:56:54.007 に答える
0

"\r\n"シリアル化された JSON の最後に追加してみてください。

于 2013-02-09T23:58:11.740 に答える