A. 在socket 編程時如果客戶端發給伺服器端的數據太大,一次性不能傳送完,要怎麼辦
數據太大的話一般都會分包發送,TCP和UDP包都有最大的上限。如果伺服器端收不到就不會執行的話要用TCP協議。
傳輸層:
對於UDP協議來說,整個包的最大長度為65535,其中包頭長度是65535-20=65515;
對於TCP協議來說,整個包的最大長度是由最大傳輸大小(MSS,Maxitum Segment Size)決定,MSS就是TCP數據包每次能夠傳
輸的最大數據分段。為了達到最佳的傳輸效能TCP協議在建立連接的時候通常要協商雙方的MSS值,這個值TCP協議在實現的時候往往用MTU值代替(需
要減去IP數據包包頭的大小20Bytes和TCP數據段的包頭20Bytes)所以往往MSS為1460。通訊雙方會根據雙方提供的MSS值得最小值
確定為這次連接的最大MSS值。
IP層:
對於IP協議來說,IP包的大小由MTU決定(IP數據包長度就是MTU-28(包頭長度)。 MTU值越大,封包就越大,理論上可增加傳送速率,但
MTU值又不能設得太大,因為封包太大,傳送時出現錯誤的機會大增。一般默認的設置,PPPoE連接的最高MTU值是1492, 而乙太網
(Ethernet)的最高MTU值則是1500,而在Internet上,默認的MTU大小是576位元組
B. c#socket怎麼傳輸大數據
constintblockLength=512*1024;
publicvoidSendFile(stringfilePath,NetworkStreamstream)//發送文件
{
//傳輸內容
using(FileStreamfs=File.Open(filePath,FileMode.Open))
{
intreadLength=0;
byte[]data=newbyte[blockLength];
//發送大小
byte[]length=newbyte[8];
BitConverter.GetBytes(newFileInfo(filePath).Length).CopyTo(length,0);
stream.Write(length,0,8);
//發送文件
while((readLength=fs.Read(data,0,blockLength))>0)
{
stream.Write(data,0,readLength);
}
}
}
publicboolReceiveFile(stringfileName,NetworkStreamstream)//接收文件
{
try
{
longcount=GetSize(stream);
if(count==0)
{
returnfalse;
}
longindex=0;
intcurrentBlockLength=0;
intreceivedBytesLen=1;
using(FileStreamfs=newFileStream(fileName,FileMode.OpenOrCreate))
{
while(receivedBytesLen>0&&index<count)
{
byte[]clientData=newbyte[blockLength];
receivedBytesLen=0;
if(blockLength<count-index)
{
currentBlockLength=blockLength;
}
else
{
currentBlockLength=(int)(count-index);
}
receivedBytesLen=stream.Read(clientData,0,currentBlockLength);
fs.Write(clientData,0,receivedBytesLen);
index+=receivedBytesLen;
}
}
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
returnfalse;
}
returntrue;
}
privateintGetSize(NetworkStreamstream)//獲取文件大小
{
intcount=0;
byte[]countBytes=newbyte[8];
try
{
if(stream.Read(countBytes,0,8)==8)
{
count=BitConverter.ToInt32(countBytes,0);
}
else
{
return0;
}
}
catch
{
return0;
}
returncount;
}
C. C 語言socket 的send數據太大,最大能發送多少如何分批發送
如果你SOCKET發的數據報,比如UDP協議, 那麼是有最大可發送大小.
這可以用下面這樣getsockopt取得最大數據報大小.
----------------------------------------
SOCKET s;
int iSize, iVal, ret;
.....
iSize = sizeof(iVal);
ret = getsockopt(s, SOL_SOCKET, SO_MAX_MSG_SIZE, (char *)&iVal, &iSize);
//-----------------------------------------
如果是TCP,則不需要這樣做.
你send返回的位元組數有801770個位元組(是位元組數吧!),和send里的規定length一樣大,這可以表明你成功的將這些數據提交底層TCP協議棧去發送。
接收方要是處理成確的,是可以正確無誤的收到這些數據的。
//---------------------------------------------
TCP 提供的是可靠的數據流服務 , 這意味著, 接收方,並不需要關心也不應該假定發送方調用了多少次SEND, 它只需要管的是通過若干次RECV把數據從協議棧的緩沖區讀取出來。
TCP不必擔心丟數據,但發送的時候,SEND要注意處理返回值,如果是阻塞方式,太多的數據會被阻塞, 如果是非阻方式,返回緩沖區滿錯,然後延時重發。
D. socket怎麼分段傳輸大數據
如何將java中class文件反編譯成java文件
jad:反編譯工具下載
jad:反編譯工具
可以將class文件反編譯成java文件
假設將jad.exe安裝在f:/java/jad目錄下
把要反編譯的文件*.class復制到此目錄下,接著接以下步驟,
在命令行窗口環境中進入jad目錄,
然後運行:jad -s java *.class (附,*.class指要反編譯的文件名)
如果*.class文件和jad程序不在同一個目錄,就要用到path環境變數,
將jad 所在目錄加到path路徑中即可:set path=%path%;f:/java/jad
ouznetsov開發,目前最新版本為0.2.5.它由 C++開發,並且官方可以下載 windows、linux和蘋果Mac Os三個平台的可執行程序。
如何將現有的web程序導入到myeclipse環境中去
如果要將別人發布的war包,導入到自己的eclipse環境中進行再開發,最快的方法如下:
1、新建一個myeclipse的web project。
2、右鍵該工程,myeclipse/add struts capability,設置成struts開發環境。
3、將war包解壓,全目錄覆蓋新工程的WebRoot(包括其中的w www.cshangzj.com eb-inf/meta-inf目錄),相應的scr目錄(或者對應的包含java文件的目錄)覆蓋eclipse的src目錄。myeclipse會自動將WEB-INF\lib下的jar包作為放到classpath中的。
4、refresh該工程,over。
JAVA語言是1995年5月由SUN公司發布的,由於其安全性高、代碼優化、跨平台等特性,迅速取代了很多傳統高級語言,占據了企業級網路應用開發等諸多領域的霸主地位。 不過,JAVA最突出的跨平台優勢使得它不能被編譯成本。
JAVA語言是1995年5月由SUN公司發布的,由於其安全性高、代碼優化、跨平台等特性,迅速取代了很多傳統高級語言,占據了企業級網路應用開發等諸多領域的霸主地位。
不過,JAVA最突出的跨平台優勢使得它不能被編譯成本地代碼,而要以中間代碼的形式運行在虛擬機環境中,這使得JAVA的反編譯要比別的高級語言容易實現,並且反編譯的代碼經過優化後幾乎可以與源代碼相媲美。
為了更好地保護知識產權,避免本公司的智力成果輕易被人竊取,開發者有必要對反編譯工具深入了解,以便有針對性地採取保護措施。
目前,比較流行的JAVA反編譯工具有近30種,其中有三款堪稱精品:
一、 應用廣泛的JAD
E. socket 大文件如何發送
大文件的發送可以把大文件按照二進制byte[]的方式讀取 設定一次發送的最大內位元組數 然後容根據最大發送位元組數分割成N個等分可能最後一個N的位元組數小於最大發送位元組數 解決方法是後面補填0就可以了因為發送時間可能會很長 因此用TCP 協議 保證傳輸的完整性 另外你可以自己編寫協議(每次發送之前做一次校驗 接收方校驗通過就通知發送方發送下一個包就可以了) 做實驗的話校驗部分就可有可無
F. c# socket傳送大數據總是截斷
8192=8*1024. 你這是8K的數據,偏小。一般不會是服務端的大小限制。既然序列化和反序列都是你自己發送、接受。跟蹤一下兩端的異常信息才可以進一步判斷