求最簡單的功能實作,udp和tcp的都行,我做了一個局域網聊天軟體,實作只要把檔案拖入訊息發送框就能發送給單個用戶,網上找了半天硬是沒找到合適的類,如果大神們懶得解答那請麻煩一下告訴我應該用到哪個類里面的哪個方法?我自己去查
uj5u.com熱心網友回復:
和‘聊天’實作一樣啊。發文字和發檔案沒有本質的區別。uj5u.com熱心網友回復:
那你怎么把檔案決議成位元組碼給人家發過去,然后人家再把位元組碼決議成檔案呢uj5u.com熱心網友回復:
這幾天剛練習過,和聊天室的寫法一樣,用socket就能完成,但是有幾個注意的點1、在傳輸程序中不能將byte[] 轉成string
2、寫檔案時可以利用FileStream
3、發送檔案時要先將檔案名和檔案長度發送過去,以方便接收
4、為了區分發送的資訊和檔案可以在資訊流前面添加自定義規則
讀檔案的Code
OpenFileDialog OpenFile;
DialogResult m_drTansferFile = new DialogResult();
OpenFile = new OpenFileDialog();
OpenFile.Title = "Selct a File to Transfer";
m_drTansferFile = OpenFile.ShowDialog();
if( m_drTansferFile != DialogResult.OK ) {
MessageBox.Show( "Transfer is Cancelled" );
return null;
}
string szFullPath = OpenFile.FileName;
return szFullPath;
收檔案的Code
byte[] buffer = new byte[ 128 ];
m_WorkSocket.Receive( buffer );
string szText = Encoding.UTF8.GetString( buffer );
szText = szText.Trim( '\0' );
string[] szMessage = szText.Split( ' ' );
int nLength = int.Parse( szMessage[ 1 ] );
string szFileName = szMessage[ 0 ];
//定義接收資料的快取
byte[] FileMessage = new byte[ nLength ];
int nSum = 0;
//第一次接收的實際資料 flag
int nFlag = m_WorkSocket.Receive( FileMessage, 0, FileMessage.Length, SocketFlags.None );
//如果沒有接收到定長的資料,回圈接收
while( nFlag != FileMessage.Length ) {
nSum += 1;
nFlag += m_WorkSocket.Receive( FileMessage, nFlag, FileMessage.Length - nFlag, SocketFlags.None );
Console.WriteLine( "接收次數:"+nSum .ToString () );
}
Console.WriteLine( "跳出回圈" );
string szFullName = string.Concat( @"E:\C#project\1a\", szFileName );
FileStream fs = new FileStream( szFullName, FileMode.Create );
fs.Write( FileMessage, 0, FileMessage.Length );
fs.Flush();
Console.WriteLine( fs.Position );
Console.WriteLine( "OK" );
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/93469.html
標籤:C#
