讓我先告訴我想要做什麼。 我想寫一個非常簡單的代理服務器。 我使用套接字API來創建套接字。 socket = socket(AF_INET, SOCK_STREAM, 0));
如何使用C中的套接字讀取流的TCP數據包?
我的代理服務器工作正常,直到我嘗試了流數據。 所以我做的是我的服務器套接字監聽請求並解析它們,然後將它們轉發給實際的服務器,然後我使用read()調用來讀取數據包&我將其盲目地轉發回客戶端。
對於所有的html頁面和圖片,它工作正常。但是當我嘗試轉發流式視頻時,我無法做到這一點。
我的套接字始終返回應用層數據(HTTP數據包),但在流視頻中,只有第一個數據包是http,剩下的全部只是TCP數據包。所以我只能轉發第一個HTTP數據包。當我嘗試讀取包含數據的其他數據包(全部是TCP)時,我在應用層沒有得到任何東西(這很明顯,因爲這些數據包中的應用層沒有任何東西)。所以我卡住了,我不知道如何從TCP層讀取這些數據包(我不想使用原始套接字)並完成我的工作。
在此先感謝
感謝您的回覆。我同意你的看法,但是你不認爲我應該能夠讀取數據流的TCP數據包中的數據,因爲我可以使用HTML頁面或數據流的所有其他數據包。 – Durin
絕對。我現在懷疑的是,爲了將所有數據讀入大緩衝區,您只需調用read()函數一次,然後一次處理所有數據,您應該在其中執行小讀取操作並在其間執行處理。 –