2013-05-09 71 views
1

我有下面的代碼位於一個循環內(簡體)。 cscc是連接到本地主機上的服務器的客戶端套接字。我的服務器向客戶端發送單個字符。但是,我似乎沒有正確接受它。協議是TCP。lua socket多次接收報告相同的數據

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 :

明顯,部分不爲空在這裏。這裏發生了什麼?爲什麼我一遍又一遍地收到同樣的東西?

+1

也許你正在收到一個不可打印的字符(或在開頭爲'0')?你有沒有測試零件的尺寸?也許這個字符串是空的? – 2013-05-09 11:03:46

回答

2

也許服務器從來沒有真正發送過任何數據。檢查part是否爲非空,並查看如果不將第三個參數傳遞給socket.select會發生什麼情況。

0

的LuaSocket參考文檔說:

「以錯誤的情況下,該方法返回nil緊隨其後的錯誤消息,其可以是字符串‘閉合’[...]或字符串「超時'如果在操作過程中發生超時,並且在錯誤消息之後,該功能返回發送的部分結果。「

空字符串將被視爲「部分結果」。


(part and #part > 0)嘗試測試,這將檢查部分是非nil,然後檢查是否實際上包含任何字節。

也可能值得使用netcat或類似的方法檢查,以確保您的服務器實際上正在發送您期望的數據。

相關問題