hi im working on a simple IM chat messenger and every thing works fine as long as i sends a "controlled" amount of lines to the server but what i want is to let the user be able from the chat window to send multiple lines. at the moment im using readlines because i cant get .read or .write to work on either the server or client side. i've also been looking on the web on how to use the "NetworkStream" but from the demos i've tried its very buggy and seems to mess up chars at random.
here is a simple code of the client that sends messages:
private void SendMessage()
{
string[] message = chatMessage.Text.Split('\n');
chatText.Text += "\n" + userName + " Says:\n" + chatMessage.Text;
chatMessage.Text = "";
try
{
swSender = new StreamWriter(tcpServer.GetStream());
swSender.WriteLine("message");
swSender.WriteLine(userName);
swSender.WriteLine(userReciever);
foreach (string s in message)
{
swSender.WriteLine(s);
}
swSender.Flush();
}
there is only some non importance catch after that.
simple code of servers reciever and sender:
private void SendMessage(StreamReader srReceiver, StreamWriter swSender, TcpClient tcpClient, NetworkStream clientStream)
{
string userSender = srReceiver.ReadLine();
string userReceiver = srReceiver.ReadLine();
string message = "";
List<string> completeMessage = new List<string>();
int index = 0;
do
{
message = srReceiver.ReadLine();
if (message != null)
{
completeMessage.Add(message);
}
index++;
}
while (srReceiver.ReadLine() != null);
try
{
if (htUsers.Contains(userReceiver) == true)
{
TcpClient tcpClientReceiver = new TcpClient();
tcpClientReceiver = (TcpClient)htUsers[userReceiver];
StreamWriter swSendertoReceiver = new StreamWriter(tcpClientReceiver.GetStream());
swSendertoReceiver.WriteLine("message");
swSendertoReceiver.WriteLine(userSender);
swSendertoReceiver.WriteLine(userReceiver);
foreach (string s in completeMessage)
{
message = s;
swSendertoReceiver.WriteLine(message);
this.add_commandwindow_text("\n[" + DateTime.Now + "] " + userSender + " to " + userReceiver + ": " + message);
}
swSendertoReceiver.Flush();
}
}
the biggest problem at this point is the server however i am looking for a way that could improve how the client sends messages but as i said i cant make write and read to work.
does any one have any idea how i could do this i a better and working way? i've also tried swWriter.Close() on client side but that makes errors on the server and the same happens the otherway around...
Ty - Jackie
EDIT: i've found something that migth work but seems like a very bad way to do it by adding a "end-of-stream string" witch i think is "duck-tape" code, im sure there is a smarter way ^^