2012-05-05 54 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(); 
相关问题