非同步SOcket傳輸類 待完善

2021-04-08 13:51:33 字數 3918 閱讀 8971

#define

dubeg

using

system;

using

system.io;

using

system.text;

using

system.net;

using

system.threading;

using

system.net.sockets;

using

system.collections.generic;

using

system.runtime.serialization.formatters.binary;

namespace

socketserver

...;

//文字

readonly

byte

_objehead 

=new

byte

...;//

物件readonly

byte

_filehead 

=new

byte

...;//

檔案int

receivelen;                         

//接收到的未處理的資料的長度

//int sendbigs;                         

//傳送的包數

#endregion

屬性#region

屬性/**/

//////

獲取遠端終結點

///public

endpoint remoteendpoint

...}

/**/

//////

socket是否已連線

///public

bool

connected

...}

/**/

//////

設定或獲取臨時資料夾的路徑

///public

string

filepath

...set

...}

#endregion

建構函式

#region

建構函式

tcptranslate()

...}

/**/

//////

伺服器端呼叫此建構函式

//////

socket成功連線的socket

public

tcptranslate(socket socket)

: this

()...

/**/

//////

客戶端呼叫此建構函式

//////

要連線的伺服器ip

///要連線的埠

public

tcptranslate(

string

ip, 

intport)

: this

()...

#endregion

[system.diagnostics.conditional(

"dubeg")]

public

static

void

writeline(

string

message)

.../**/

//////

開始接收資料

///public

void

startreceive()

...else

...}

private

void

connected(iasyncresult iar)

.../**/

//////

接收資料**函式

//////

private

void

receivcedata(iasyncresult ar)

...else

...}

switch

(recebytes[0])

...//

繼續接收資料

byte

bytes 

=new

byte

[_bagsize];

_socket.beginreceive(bytes, 

0, bytes.length, socketflags.none,

newasynccallback(receivcedata), bytes);

return;}

catch

(socketexception socketerr)

...catch

(objectdisposedexception socketclose)

...catch

(exception err)

...//

斷開連線事件

if(disconnect 

!=null

) disconnect(_socket, 

this

);_recobjelen =-

1;

_recfilelen =-

1;

}void

receivcefile(

intrecelen, 

byte

recebytes)

...else

...}

else

if(bagsequence 

==_bufferfile.nextbag)

...sendstate(recebytes);

}void

refileend(filebase f)

...}

void

repeatsend()

...void

requestrepeatsend()

.../**/

//////

接收多包時的應答包

//////

狀態protected

virtual

void

sendstate(

byte

recebytes)

...protected

virtual

void

sendend(iasyncresult iar)

...void

receivcetext(

intrecelen, 

byte

recebytes)

...writeline(restr);

}/**/

//////

傳送文字

//////

///public

bool

sendtext(

string

text)

...return

false;}

/**/

//////

傳送檔案

//////

檔案路徑

///public

bool

sendfile(

string

filepath)

...else

...);

_allowsendfile 

=true;}

return

true;}

return

false;}

private

void

sendfilecallback(iasyncresult ar)

...else

...);

if(sendoverfile 

!=null

)...

_allowsendfile 

=true;}

}}}

同步傳輸 非同步傳輸

填空題 2016年 在資料傳輸率相同的情況下,同步傳輸率高於非同步傳輸速率的原因是 a 發生錯誤的概率小 b 附加的冗餘資訊量少 c 字元或組傳送,間隔少 d 採用crc迴圈碼校驗 b資料的傳輸方式一般有兩種,即同步傳輸與非同步傳輸。非同步傳輸意味著傳輸的雙方不需要使用某種方式來 對時 所以它並不傳...

同步傳輸 與 非同步傳輸

開門見山直接看圖。解析 1 不管是同步還是非同步,字元的傳送時間和接受時間要一樣。如一個字元傳送為1秒,接受也需要為1秒 小於一秒的話,利用軟體延時 2 同步非同步最大的不同是 非同步傳輸時,間隙可以不同步。比如,幀1傳輸完後 隔5秒傳輸幀2.間隙為5秒。再接受方,接受完幀1後,可以隔10秒再開始接...

同步傳輸與非同步傳輸

在同步傳輸中,資料以塊或幀的形式傳送。此傳輸是全雙工型別。在傳送者和接收者之間強制性同步。在同步傳輸中,資料之間沒有間隙。與非同步傳輸相比,傳輸大量資料更加有效和可靠。在非同步傳輸中,資料以位元組或字元的形式傳送。該傳輸是半雙工型傳輸。在該傳輸中,在資料的起始位和停止位都新增了奇偶校驗位。它不需要同...

socket 傳輸檔案

在兩臺計算機傳輸檔案之前,必需得先有一臺計算機建立套節子連線並繫結一個固定得埠,並在這個埠偵聽另外一臺計算機的連線請求。socket new socket addressfamily.internetwork,sockettype.stream,protocoltype.tcp socket.blo...

socket 傳輸檔案

在兩臺計算機傳輸檔案之前,必需得先有一臺計算機建立套節子連線並繫結一個固定得埠,並在這個埠偵聽另外一臺計算機的連線請求。socket new socket addressfamily.internetwork,sockettype.stream,protocoltype.tcp socket.blo...