socket отправляем 2 сообщения, приходит 1, содержащее оба
Я недавно начал изучать первый язык, поэтому кривлю как могу, но стараюсь писать программу сам, хотя и личу непонятные места у других похожих проектов.
Пишу простенький чатик (все это делали, наверное ;) ) и в рассылке юзеров у меня попалась проблема.
Вот этим кодом я рассылаю каждому сокету из хештейбла всех юзеров из листа:
Код:
foreach (Socket s_client in clients.Keys)
{
foreach (string user in users){
string umsg ="U$"+user;
byte[] msg = Encoding.UTF8.GetBytes(umsg);
try
{
s_client.Send(msg,msg.Length, SocketFlags.None);
}
catch { }}
}
{
foreach (string user in users){
string umsg ="U$"+user;
byte[] msg = Encoding.UTF8.GetBytes(umsg);
try
{
s_client.Send(msg,msg.Length, SocketFlags.None);
}
catch { }}
}
Код:
while (isClientRunning)
{
try
{
byte[] bytes = new byte[1024];
int i= client.Receive(bytes);
string data = Encoding.UTF8.GetString(bytes, 0, i);
rcvdData = data.Split(new Char[] { '$' });
if (i > 0)
{
switcher();
}
}
catch { }
}
{
try
{
byte[] bytes = new byte[1024];
int i= client.Receive(bytes);
string data = Encoding.UTF8.GetString(bytes, 0, i);
rcvdData = data.Split(new Char[] { '$' });
if (i > 0)
{
switcher();
}
}
catch { }
}
Если вы хотите уйти от этого далеко и надолго - то изучайте сразу WCF.
там ваше "сообщение" будет нормальным классом, передаваемым - пересылаемым как параметр, и никакого самовольного "дайте две" - не будет.
:-)
В противном случае - вам надо в вашу строку вводить хотябы символы начала-завершения, и при чтении из сокета - ожидать получения потока, а не одного сообщения.