採用報頭形式傳送檔案,傳送的整塊位元組由4部分組成。
1. 檔案的名稱轉成位元組後,計算該位元組長度;
2. 檔名轉成的位元組 ;
3. 把檔案轉成位元組,計算該檔案位元組的長度;
4. 檔案轉的位元組
服務端通過讀取長度知道後面該長度的位元組為檔名或檔案。
檔名長度用4個位元組裝載
檔名長度不限
檔案長度用4個位元組裝載
檔案長度不限
a1a2
a3a4
01110111…
111000000…
01110111…
0101010100100001110101001001010010101010…
在位元組流中,a1佔體積4個位元組,a1表示a2的長度,a3佔體積4個位元組,a3表示a4的長度
- 第一步,建立連線
private executorservice executor = executors.newfixedthreadpool(5);..
.socket socket = new socket(host, integer.parseint(port));
executor.submit(new sendmusicrunnable(socket, musicentity));
private
class
sendmusicrunnable
implements
runnable
@override
public
void
run()
dos.flush();
//5.傳遞結束
log.e("tag", "【sendmusicrunnable】類的方法:【run】: " + "傳檔案結束");
} catch (ioexception e) finally
if(dos!=null)}}
}/** * int型別轉成4個位元組的byte
**/private
static
byte inttobytearray(int i)
至此客戶端傳輸結束。
c#寫的服務端執行流程大概如下
1. 開始接收位元組流;
2. 判斷接收了4個位元組,然後知道接下來的n個位元組是檔名稱;
3. 讀取檔名稱結束後,即讀到第4+n位元組,再截獲第(4+n)~(4+n+4)位元組;
4. 知道檔案長度為xn;
5. 然後一直讀到結束,儲存檔案到指定位址,判斷檔案長度和xn是否相等,不相等刪除檔案。
下次再更新c#寫服務端的**。
C語言中給main函式傳遞引數!
相信大家用c語言定義main函式時,大多數人的寫法都是int main void 其實main函式是可以向其傳遞引數的,給個例項 給main函式傳參例項 include include int main int argc,char argv int main int argc,char argv i...
c 中如何給函式傳遞陣列引數
在c 中,如果要給乙個函式傳入乙個陣列,一般都是傳入兩個引數乙個陣列指標和乙個陣列大小 例 void print 1 int n,int datas std cout std endl 對這個函式,我們可以這樣使用它 const int n 3 int datas n print 1 n,datas...
C 傳遞lambda表示式給函式
有時候,我們會需要將乙個函式作為變元傳遞給另乙個函式,這時,就需要了解函式指標的作用了 先來回顧一下函式指標 函式指標不同於普通指標,它儲存的內容還包括乙個函式的返回型別和引數列表,形式為 返回型別 函式指標名 引數列表 當乙個函式指標建立後,它就只能指向對應返回型別和引數型別的函式,無法指向其他型...