2012-05-05 51 views
1

我有一個基於客戶端和服務器之間的TCP連接的應用程序,我可以發送/接收字符串,但我不知道如何發送字節數組:我用來從客戶端發送一個字符串到服務器是如下:從客戶端發送字節數組到服務器?

static void Send(string msg) 
    { 
     try 
     { 
      StreamWriter writer = new StreamWriter(client.GetStream()); 
      writer.WriteLine(msg); 
      writer.Flush(); 
     } 
     catch 
     { 
     } 
    } 

對於爲例:

 Send("CONNECTED| 84.56.32.14") 

而在服務器側I使用以下代碼接收所發送的字符串:

 void clientConnection_ReceivedEvent(Connection client, String Message) 
    { 
     string[] cut = Message.Split('|'); 
     switch (cut[0]) 
     { 
      case "CONNECTED": 
       Invoke(new _AddClient(AddClient), client, null); 
       break; 
      case "STATUS": 
       Invoke(new _Status(Status), client, cut[1]); 
       break; 

     } 
    } 

任何人都可以幫助我修改上述功能,以發送/接收除字符串以外的字節數組。使用這樣的:

 Send("CONNECTED | 15.21.21.32", myByteArray); 

任何幫助將高度讚賞,三江源

+0

一個空的catch塊ist總是一個相當糟糕的主意。 –

回答

5

只需使用流 - 沒有必要在這裏一個作家。基本發送很簡單:

stream.Write(data, 0, data.Length); 

但是,您可能需要考慮「幀」,即它如何知道每個太陽消息的開始和結束位置。對於字符串,這通常是特殊字符(也許是新行) - 但在原始二進制文件中很少可能。一個常見的應用是以預定義的方式(例如,網絡字節順序固定的4字節無符號整數)來處理具有數字f個字節的消息。

閱讀:再次,使用流讀取方法,但明白,你總是需要檢查返回值;僅僅因爲你說「讀取最多20個字節」並不意味着你會得到那麼多,即使有更多的東西來到 - 例如你可以讀取3,3,3,11個字節(不太可能,但你明白我的意思)。例如,要準確讀取20個字節:

var buffer = new byte[...]; 
int count = 20, read, offset = 0; 
while(count > 0 && ((read = source.Read(buffer, offset, count)) > 0) { 
    offset += read; 
    count -= read; 
} 
if(count != 0) throw new EndOfStreamException(); 
相關問題