проблемы в клиент серверном приложении
От: newmyface  
Дата: 11.09.11 17:12
Оценка:
Доброго время суток!

вот столкнулся с такой проблемой. пишу чат 1 на 1 в данном случае.

суть проблемы в том что что бы принять сообщение от другого нужно все время прослушивать порт.

но вот не задача отправить из за этого не получается
вот этот код запускается в отдельном потоке:
Код:
public void Server() 
 { 
 IPHostEntry ipHost = Dns.Resolve("localhost"); 
 IPAddress ipAddr = ipHost.AddressList[0]; 
 IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000); 

 Socket sListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

 try 
 { 
 sListener.Bind(ipEndPoint); 
 sListener.Listen(1); 

 ActionReadDATA("Ожидается подключение к " + ipEndPoint); 
 bReadMesg = false; 

 Socket handler = sListener.Accept(); 

 string data = ""; 
 WriteDATA = "Вас приветствует сервер"; 

 while (!bExitProg)//цикл для приема и передачи сообщений 
 { 

 if (bReadMesg)//принимаем 
 { 
 while (true) 
 { 

 byte[] bytes = new byte[1024]; 

 int bytesRec = handler.Receive(bytes); 

 data += Encoding.UTF8.GetString(bytes, 0, bytesRec); 

 if (data.IndexOf("<theend>") > -1) //конец сообщения 
 { 
 bReadMesg = false; 
 break; 
 } 

 if (data.IndexOf("<theendsocket>") > -1) //конец соеденения 
 { 
 bExitProg = true; 
 bReadMesg = false; 
 break; 
 } 

 } 
 ActionReadDATA(data); 
 data = ""; 
 } 

if (bSendMesg)//отправляем 
 { 

 byte[] msg = Encoding.UTF8.GetBytes(WriteDATA + "<theend>"); 

 handler.Send(msg); 
 WriteDATA = ""; 
 bSendMesg = false; 

 } 

 } 
 handler.Shutdown(SocketShutdown.Both); 
 handler.Close(); 
 } 

 catch(Exception e) 
 { 
 ActionReadDATA(e.ToString()); 
 } 

 } // end of Main

как же исправить? уже просто сил не хватает(((((((((((

ФАЙЛ проекта http://files.mail.ru/CG797O
проблемы в клиент серверном приложении
Re: проблемы в клиент серверном приложении
От: okman Беларусь https://searchinform.ru/
Дата: 11.09.11 22:33
Оценка:
Здравствуйте, newmyface, Вы писали:

N>Доброго время суток!

N> вот столкнулся с такой проблемой. пишу чат 1 на 1 в данном случае.
N> суть проблемы в том что что бы принять сообщение от другого нужно все время прослушивать порт.
N> но вот не задача отправить из за этого не получается

То есть как — не получается ?
Вы создаете сокет, биндите его на локалхост (кстати, это ошибка, скорее всего. Биндить надо на реальный IP).
Затем выполняете listen и accept. Все, сокет слушает входящие коннекты.
Когда приходит коннект, создается сокет-обработчик (handler), который сначала забирает
пришедшие данные (первый цикл), а затем шлет ответ (второй цикл).
После этого handler утилизируется, и процедура повторяется.
Что именно и где тут может не работать ?

Кстати, вот так, —

N> handler.Shutdown(SocketShutdown.Both);


,- делать нельзя.
Сокет должен закрывать только свою половину соединения (SocketShutdown.Send).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.