關於C,100分 相送。c中socket程式設計中,怎麼獲取接受到得資料長度

2021-04-01 08:11:01 字數 4744 閱讀 2195

1樓:匿名使用者

這個.一般都是建立一個緩衝區

byte buffer = new byte[1024];

然後通過read迴圈去填充緩衝區的.直到read到buffer中的為null了..

最後你可以通過總的接受到的資料得到長度.不要妄想在接收完之前能得到資料長度.不現實的.

2樓:編號

伺服器端向客戶端傳送檔案之前,可以先向客戶端傳送一個資料大小的值。否則只能累計分包值得到檔案資料最終長度

receive方法中的幾個過載都是什麼啊

------------------------------------

完全可以自己看msdn

socket.receive (byte) 從繫結的 socket 套接字接收資料,將資料存入接收緩衝區。

由 .*** ***pact framework 支援。

socket.receive (泛型 ilist) 從繫結的 socket 接收資料,將資料存入接收緩衝區列表中。

socket.receive (byte, socketflags) 使用指定的 socketflags,從繫結的 socket 接收資料,將資料存入接收緩衝區。

由 .*** ***pact framework 支援。

socket.receive (泛型 ilist, socketflags) 使用指定的 socketflags,從繫結的 socket 接收資料,將資料存入接收緩衝區列表中。

socket.receive (byte, int32, socketflags) 使用指定的 socketflags,從繫結的 socket 接收指定位元組數的資料,並將資料存入接收緩衝區。

由 .*** ***pact framework 支援。

socket.receive (泛型 ilist, socketflags, socketerror) 使用指定的 socketflags,從繫結的 socket 接收資料,將資料存入接收緩衝區列表中。

socket.receive (byte, int32, int32, socketflags) 使用指定的 socketflags,從繫結的 socket 接收指定的位元組數,存入接收緩衝區的指定偏移量位置。

由 .*** ***pact framework 支援。

socket.receive (byte, int32, int32, socketflags, socketerror) 使用指定的 socketflags,從繫結的 socket 接收資料,將資料存入接收緩衝區。

3樓:強女幹未遂被日

函式原型:

public int receive (byte[ ] buffer, int size, socket flagssocketflags)

引數:buffer 表示接收到的資料的儲存位置;size表示要接收資料的大小;socketflagst提供socket訊息的常數值,具有允許按位組合其成員值的屬性。返回值為傳送到socket的位元組數。

c# socket 如何完全傳送/接收資料

4樓:大野瘦子

傳送:private void button2_click(object sender, eventargs e)

catch}}

接收:system.timers.timer atimer = new system.timers.timer();

byte res = new byte[1024];

private void form1_load(object sender, eventargs e)

void timermange()

private void socket_rev(object sender, eventargs e)}

5樓:匿名使用者

比如b1:1-100是一個「資料包」,b2:0是一個「資料包」,每次傳送以「資料包」為單位傳送,「資料包」中包含「開始」和「結束」的標記,那麼 傳送端 b1,b2的執行可以想象成 資料包b1:

b1開始+1~100+b1結束,資料包b2:b2開始+0+b2結束,接受端 接受到資料包b1的"b1開始"標記時,建立b1執行緒,b1執行緒接受到1~10時,接受端 接受到資料包b2的"b2開始"標記,建立b2執行緒,b2執行緒接受0,b2執行緒接受"b2結束"標記,釋放b2執行緒,同時b1執行緒接受到11~100和"b1結束"標記釋放b1執行緒。

文字描述的不是很給力,**例子看看,希望能讓你明白。

6樓:匿名使用者

存在情況:

1、 接收端迴圈沒寫好

2、沒有讀完網路流(快取可以設大些,或判斷是否讀到完所有的位元組)建議要一次發完所有資料 可以先將100個數字拼接成字串,然後傳送一次 。字串頭可加入[length=***]其中***是實際傳送的字串長度(注意不是位元組陣列buffer的長度),那麼對於上面的請求,則我們傳送的資料為:「[length=9]1,2,23,54」。

而服務端接收字串之後,首先讀取這個「後設資料」的內容,然後再根據「後設資料」內容來讀取實際的資料。取得內空後就可以拆分成數字

7樓:匿名使用者

伺服器端:

namespace sockettest

",socket.remoteendpoint);

socket.send(encoding.ascii.getbytes("wel***e to server"));

//thread thread = new thread(receivemessage);

// thread.start();

}public static void receivemessage(object obj)

from ", datastring,socket.remoteendpoint);

//thread thread = new thread(sendmessage);

//thread.start(socket);

}static socket serversocket;

static void main(string args)

at port ", ipendclient.address, ipendclient.port);

//定義待傳送字元

string wel***e = "wel***e to my server";

//資料型別轉換

data = encoding.ascii.getbytes(wel***e);

while (true)

catch (exception)

}client.close();

}//console.writeline("disconnect form", ipendclient.address);

serversocket.close();}}

}客戶端:

namespace client

public static void receivemessage(object obj)

from ", datastring, socket.remoteendpoint);

//thread thread = new thread(new parameterizedthreadstart(sendmessage));

//thread.start(socket);

}static void main(string args)

//異常處理

catch (socketexception e)

//定義接收資料的長度

int recv = socket.receive(data);

//將接收的資料轉換成字串

stringdata = encoding.ascii.getstring(data, 0, recv);

//控制檯輸出接收到的資料

console.writeline(stringdata);

while(true)

//將從鍵盤獲取的字串轉換成整型資料並儲存在陣列中

data = encoding.ascii.getbytes(input);

//傳送該陣列

socket.send(data, data.length, socketflags.none);

////如果字串是"exit",退出while迴圈

//if (input == "exit")

//////對data清零

//data = new byte[1024];

////定義接收到的資料的長度

//recv = socket.receive(data);

////將接收到的資料轉換為字串

//stringdata = encoding.ascii.getstring(data, 0, recv);

////控制檯輸出字串

//console.write(stringdata);

////傳送收到的資料

//socket.send(data, recv, 0);

}console.writeline("disconnect from server");

socket.shutdown(socketshutdown.both);

socket.close();}}}

8樓:天涯

你在傳送端 設定一個標誌,說明我傳送的東西已經傳送完畢,你接受的時候,判斷接受的網路流中是否有這個標誌,如果有,代表已經接收完整了。否則沒有。

打字不易,如滿意,望採納。

100分懸賞關於殺豬出肉的問題,100分懸賞!!!關於殺豬出肉的問題!!!

難怪大學生賣豬肉。賣豬肉沒大學文憑都答不出這個問題來。豬頭肉就一個,是整幅的,包括一段豬尾巴,舌頭。接下來是分骨頭,排骨,脊椎骨。然後就是順著脊椎骨的瘦肉,此段瘦肉無肥肉,非常嫩,排骨兩邊的是五花肉。還有前腿,腿肉,後腿,臀肉,內臟。內臟大部分是不切的,心臟,豬肚,腎,腸。肝是切著賣的。其他就是豬頭...

關於linux管理員100分

1.前景非常不錯,國內好像很缺少管理linux的人才 指的是高階的,低端的沒什麼,現在學網路的人都學linux的,但真正好的沒幾個,都是學學就不學了 2.需要有網路,作業系統及簡單的指令碼程式設計基礎3.一些廠商都有自己的認識,不過權威的好像沒什麼,因為證書這個東西在中國.4.推薦 鳥哥的 linu...

100分,一道C想寫的來吧,再追分

寫了很久,太辛苦了,追點分吧。include using namespace std class doublylist class listnode char data listnode prev listnode next class doublylist doublylist doublylis...