我正在使用TCP套接字,我需要在Java中創建TCP數據包,這樣我就可以通過網絡傳輸我的文件數據包&也可以幫助我將一些附加信息與數據一起添加到數據包。在java中創建數據包?
可能嗎?如果可以,請提供任何示例?
在此先感謝
我正在使用TCP套接字,我需要在Java中創建TCP數據包,這樣我就可以通過網絡傳輸我的文件數據包&也可以幫助我將一些附加信息與數據一起添加到數據包。在java中創建數據包?
可能嗎?如果可以,請提供任何示例?
在此先感謝
這是一個很奇怪的要求,我非常懷疑你......真的......需要這樣做。
讓我們開始與您試圖從方式來實現你似乎建議去做:
...轉移我的文件[...]在網絡上&也將幫助我隨同數據一起添加一些額外的信息。
因此,您想要將文件與其他數據/元數據一起傳輸。目前還不清楚元數據是否需要嵌入到文件數據中,但我不明白爲什麼,所以我不會假設。 (但它確實沒有多大區別的。)
這裏有一些方法可以做到這一點:
使用FTP協議傳輸文件和元數據。文件和元數據可以被視爲一個單元(例如在ZIP存檔中)或作爲單獨的文件。您可以安排這一點,以便它成爲服務器的客戶端,或者服務器到客戶端的傳輸。您可以使用現成的客戶端和服務器軟件。 FTPS是更安全的選擇。
使用HTTP協議傳輸文件和元數據。文件和元數據可以被視爲一個單位(例如MIME多部分文檔)或單獨的文檔。像FTP那樣休息。 HTTPS是更安全的替代方案。
您可以創建一個自定義協議,該協議通過TCP/IP連接運行,可以在任何您想要的端口上運行。您可以以任何您想要的方式編碼和傳輸文件和元數據。爲了更安全,請使用TCP/IP連接上的SSL/TLS。
您可以將文件拆分成小塊並通過UDP作爲「數據包」發送。您必須處理自己檢測並從丟包中恢復的詳細信息。這不被推薦。
您可以(理論上)使用JPCAP在原始網絡數據包上實現TCP/IP或UDP/IP。然後通過您剛剛創建的TCP/IP或UDP/IP堆棧運行上述任一項。這是一個非常糟糕的主意。這是大量的(不必要的)工作。它可能會導致您的應用程序和潛在的整個本地網絡的可靠性問題。
我建議選擇1或2,最好,3作爲替代,如果有,爲什麼HTTP & FTP協議將不會爲你工作特殊原因。
(如果你真的想這樣做5.然後我會很驚訝,如果你能找到TCP/IP的任何示例使用JPCAP實現。實在是太瘋狂的想法...)
您好斯蒂芬thanx來回答...實際上我需要與TCP套接字工作。我嘗試創建一個類,以便我可以將1024字節的數據寫入每個對象,並使用objectoutputstream傳輸它,但是當我試圖讀取循環中的對象時,它拋出異常。 – Jinith 2011-02-17 14:45:28
您可以使用JPCAP構建原始的TCP數據包,但是我會問你爲什麼會需要,如果目的是爲了傳輸文件。要傳輸文件,您無需確定99%以上的用例如何將數據包逐個傳輸。
如果你想控制單個數據包,肯定TCP是你的錯誤協議 - 看看UDP。 (這可以通過Java中的DatagramSocket或DatagramChannel訪問。)
對於TCP,只需要一個字節流(或者實際上是兩個流 - 一個發送OutputStream和一個接收InputStream),並且不必關心關於您的TCP實施發送的底層數據包。
爲什麼嘗試重新發明輪子?當您寫入`SocketOutputStream`時,數據包分段將由操作系統和Java爲您處理。 – 2011-02-17 13:24:50