При создании простого клиент-серверного приложения я столкнулся с препятствием
при тестировании его функциональности в цикле я всегда получаю
Соединение установить не удалось, так как целевая машина отказала ему 127.0.0.1:6001.
это главная серверная программа, которая находится внутри Task.Run(() => ...)
internal void startListener ()
{
ListenerThread = new Thread(new ThreadStart(socketListener));
ListenerThread.Name = "Listener";
ListenerThread.Priority = ThreadPriority.AboveNormal;
ListenerThread.Start();
ComThreadDictionary.Add(ListenerThread.Name, ListenerThread);
}
public void socketListener()
{
_infrastructure_TcpServerAndClient.CreateNewTcpListenerANDstart();
while (true)
{
_infrastructure_TcpServerAndClient.tcpSocket = await _infrastructure_TcpServerAndClient.peerListener.AcceptSocketAsync();
byte[] StreamMessage = new byte[9632];
Thread.Sleep(500);
try
{
MessageLength = _infrastructure_TcpServerAndClient.GetMessageLength(ref
StreamMessage);
}
catch(Exception ex)
{
//"Remote host disconnected"
}
//Do stuff with message...
}
}
это то, что вложено в этот метод CreateNewTcpListenerANDstart()
CreateNewTcpListenerANDstart()
{
peerListener = new TcpListener(IPAddress.Any, ComSettings.Port);
peerListener.Start();
}
peerlistener объявляется внутри следующим образом: public TcpListener peerListener внутри _infrastructure_TcpServerAndClient
вложенного метода для сбора сообщений
internal int GetMessageLength(ref byte[] StreamMessage)
{
int MessageLength;
MessageLength = tcpSocket.Receive(StreamMessage, 0, StreamMessage.Length,
SocketFlags.None);
return MessageLength;
}
РЕДАКТИРОВАТЬ Я проверил свой клиент с помощью netcat, и он работает, поэтому, скорее всего, это вина сервера.
EDIT2 проблема с этой функцией _infrastructure_TcpServerAndClient()
, когда я беру из нее все компоненты component(peerListenr)
и просто использую метод base(socketListener()
), все работает нормально -> почему так ??
peerListener
оборачивает сокет, который вы начинаете прослушивать, но вы вызываетеAcceptSocket()
на_infrastructure_TcpServerAndClient
. - person C.Evenhuis   schedule 26.05.2014AcceptSockt
ждал входящего соединения и обрабатывал их, что означает зависшую операцию, не так ли? - person LordTitiKaka   schedule 26.05.2014AcceptSocket()
наTcpListener
, который вы запустили (peerListener
), а не на другом. - person C.Evenhuis   schedule 26.05.2014