Sending Array of Bytes from Client to server?
.net-2.0, c#, client-server, tcpclient, tcplistener
Solution
Just use Stream - no need for a writer here. Basic sending is simple:
stream.Write(data, 0, data.Length);
However you probably need to think about "framing", i.e. how it knows where each sun-message starts and ends. With strings this is often special characters (maybe new line) - but this is rarely possible in raw binary. A common appoach is to proceed the message with the number f bytes to follow, in a pre-defined way (maybe network-byte-order fixed 4 byte unsigned integer, for example).
Reading: again, use the Stream Read method, but understand that you always need t check the return value; just because you say "read at most 20 bytes" doesn't mean you get that many, even if more is coming - you could read 3,3,3,11 bytes for example (unlikely, but you see what I mean). For example, to read exactly 20 bytes:
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();
Problem
I've a tcp based client-server application. I'm able to send and receive strings, but don't know how to send an array of bytes instead. I'm using the following function to send a string from the client to the server: ``` static void Send(string msg) { try { StreamWriter writer = new StreamWriter(client.GetStream()); writer.WriteLine(msg); writer.Flush(); } catch { } } ``` Communication example Client sends a string: ``` Send("CONNECTED| 84.56.32.14") ``` Server receives a string: ``` 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; } } ``` I need some help to modify the functions above in order to send and receive an array of bytes in addition to strings. I want to make a call like this: ``` Send("CONNECTED | 15.21.21.32", myByteArray); ```