I'm having trouble with a network chat based server I'm working on in
C#, It works find during the reads, but as soon as I start sending back
data my reads from that point on are corrupted. If there's any advice,
it'd be greatly appreciated :)
// created on 11/07/2004 at 19:26
using System;
using System.Net.Sockets;
class ClientTCP {
private Socket socket;
private NetworkStream networkStream;
private byte[] buffer;
private AsyncCallback callbackRead;
private AsyncCallback callbackWrite;
private static int numofSockets = 0;
private int SocketNumber;
private Player player;
public ClientTCP(Socket socketForClient, int ObjectNumber)
{
socket = socketForClient;
networkStream = new NetworkStream(socket);
buffer = new byte[256];
callbackRead = new AsyncCallback(this.OnReadComplete);
callbackWrite = new AsyncCallback(this.OnWriteComplete);
SocketNumber = ObjectNumber;
ObjectStores.clienttcp[ObjectNumber] = this;
ObjectStores.player[ObjectNumber] = player = new Player(this,
ObjectNumber);
Console.WriteLine("TCP Connection!");
ReadStream();
}
private void OnReadComplete(IAsyncResult ar)
{
int bytesRead = networkStream.EndRead(ar);
String s = System.Text.Encoding.ASCII.GetString (buffer, 0, bytesRead);
Console.WriteLine("Socket #{1}: Bytes Read: {0}\nData: {2}",
bytesRead, SocketNumber, s);
player.Recieve(s);
ReadStream();
}
private void OnWriteComplete( IAsyncResult ar )
{
networkStream.EndWrite(ar);
Array.Clear(buffer, 0, buffer.Length);
ReadStream();
}
public void Send(string s)
{
s += "\n\n";
buffer = System.Text.Encoding.ASCII.GetBytes(s);
networkStream.BeginWrite(buffer, 0, s.Length, callbackWrite, null);
}
private void ReadStream()
{
networkStream.BeginRead (buffer, 0, buffer.Length, callbackRead, null);
}
}