private void SetupServerSocket()
{
// Получаем информацию о локальном компьютере
IPHostEntry localMachineInfo =
Dns.GetHostEntry(Dns.GetHostName());
IPEndPoint myEndpoint = new IPEndPoint(
localMachineInfo.AddressList[0], _port);
// Создаем сокет, привязываем его к адресу
// и начинаем прослушивание
_serverSocket = new Socket(myEndpoint.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
_serverSocket.Bind(myEndpoint);
_serverSocket.Listen((int)SocketOptionName.MaxConnections);
}
private void ProcessSockets()
{
byte[] buffer = new byte[512];
List<Socket> readSockets = new List<Socket>();
List<Socket> connectedSockets = new List<Socket>();
List<Socket> authSockets = new List<Socket>();
try
{
SetupServerSocket();
while (true)
{
// Заполняем список сокетов чтения
readSockets.Clear();
readSockets.Add(_serverSocket);
readSockets.AddRange(connectedSockets);
// Определяем статус сокетов
Socket.Select(readSockets, null, null, int.MaxValue);
Клиент отваливается по таймауту -- C#
Возникла следующая проблема: есть многопользовательский сервер (с мультиплексированием), написан на C#. Пока тестил все на одной машине - все было отлично. Как только запустил сервер с клиентом на разных машинах - клиент отваливается по таймауту. Связь есть гарантированно.
Ниже привожу фрагменты кода, ибо у меня сильное подозрение, что я что-то не так делаю с bind'ом...
Код:
З.Ы. В C# я новичок, так что сорри если мой вопрос из серии RTFM =)
Это в любом случае проще и безопаснее того, что вы написали.
Ну, что касается TcpListener - попробую так, посмотрим, что выйдет...
И все же, хотя бы даже ради спортивного интереса, нет ли каких либо мыслей по поводу того, из-за чего такая ерунда происходит?
Кстати, что интересно: когда я коннектился с локальной машины - я вбивал даж не localhost, а ее сетевое имя - и все было нормально...
может ты биндишься на loopback-интерфейс?
Цитата:
когда я коннектился с локальной машины - я вбивал даж не localhost, а ее сетевое имя - и все было нормально...
умная виндоза должна разгадать такую "хитрость" и все-равно работать через петлю
На самом деле это было первое о чем я подумал, но к сожалению...
Файерволл?
Кстати из чего такая уверенность : "Связь есть гарантированно" ?
уверенность у меня из следующего: пинг есть, по другим открытым портам все прозванивается telnet'ом (кстати по нужному порту telnet так же отваливается по таймауту =))... Или я тут чего-то не понимаю?
Кстати, а с семейством адресации у меня все в порядке?..
В принципе я в сторону bind'а и копаю, но чессно гря уже поддостало малец, тем более, что в варианте на одной машине все отлично работало и я ужо думал прогу сдавать... =)
Цитата: Nameless One
кстати по нужному порту telnet так же отваливается по таймауту...
естественно, только когда прога запущена?
Цитата: Nameless One
Кстати, а с семейством адресации у меня все в порядке?..
Скорей всего.. InterNetwork там должно быть
А сервер из Listen/Accept то выходит? (или это асинхронные сокеты?)
и кстати, где сам Accept-то?