Network Chat Implimentation

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Charles Pratt

    Network Chat Implimentation

    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.Sock ets;

    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(Socke t socketForClient , int ObjectNumber)
    {
    socket = socketForClient ;
    networkStream = new NetworkStream(s ocket);
    buffer = new byte[256];
    callbackRead = new AsyncCallback(t his.OnReadCompl ete);
    callbackWrite = new AsyncCallback(t his.OnWriteComp lete);

    SocketNumber = ObjectNumber;
    ObjectStores.cl ienttcp[ObjectNumber] = this;
    ObjectStores.pl ayer[ObjectNumber] = player = new Player(this,
    ObjectNumber);

    Console.WriteLi ne("TCP Connection!");
    ReadStream();
    }

    private void OnReadComplete( IAsyncResult ar)
    {
    int bytesRead = networkStream.E ndRead(ar);
    String s = System.Text.Enc oding.ASCII.Get String (buffer, 0, bytesRead);
    Console.WriteLi ne("Socket #{1}: Bytes Read: {0}\nData: {2}",
    bytesRead, SocketNumber, s);
    player.Recieve( s);
    ReadStream();
    }

    private void OnWriteComplete ( IAsyncResult ar )
    {
    networkStream.E ndWrite(ar);
    Array.Clear(buf fer, 0, buffer.Length);
    ReadStream();
    }

    public void Send(string s)
    {
    s += "\n\n";
    buffer = System.Text.Enc oding.ASCII.Get Bytes(s);

    networkStream.B eginWrite(buffe r, 0, s.Length, callbackWrite, null);
    }

    private void ReadStream()
    {
    networkStream.B eginRead (buffer, 0, buffer.Length, callbackRead, null);
    }
    }
Working...