2009-06-18 3 views
0
SOCKET client = accept(listen_sock, 0, 0); 

timeval client_to; 
client_to.tv_sec = 1; 
client_to.tv_usec = 0; 
setsockopt(client, SOL_SOCKET, SO_RCVTIMEO, (char*)&client_to, sizeof(client_to)); 
char buffer[1024]; 
while ((ret = recv(client, buffer, 1024, 0)) != 0) 
{ 
    cout << "<in loop>" << endl; 
    if (ret == -1 && WSAGetLastError() != WSAETIMEDOUT) break; 
    if (ret > 0) cout << std::string(buffer, 0, ret) << endl; 
} 

closesocket(client); 

Над кодом является частью простого эхо-сервера, написанного на C++. Проблемы, с которыми я сталкиваюсь, - это ...Я хотел бы передать простой сервер C++ echo на C#

  1. Как установить значение тайм-аута и определить время ожидания?
  2. Как обнаружить разъединение разъема?

Просьба указать код на C#. Благодарю.

добавил >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Часть моего C# код будет следовать .. .

try 
{ 
    // Read all 
    spider.Client.ReceiveTimeout = 500; // spider is TcpClient type and blocking socket. 
    int readCount = 0; 
    SocketError socketError; 
    while ((readCount = spider.Client.Receive(tempBuffer, 0, tempBuffer.Length, SocketFlags.None, out socketError)) > 0) // I think time-out does not work, Receive() returns immediately. 
    { 
    recvBuffer.Append(tempBuffer, 0, readCount); 
    } 
} 
catch (Exception e) // even though spider is disconnect, no exception occurred. how can I detect disconnection? 
{ 
    Console.WriteLine("Exception: {0}", e.Message); 

} 
+0

Итак, ваш вопрос более «напишите мне для меня», чем «пожалуйста, помогите написать это»? :) Я бы предложил попробовать и вернуться, когда вы сталкиваетесь с актуальными проблемами, связанными с C#. .NET получил класс Socket, который очень похож на любой другой сокет, за исключением того, что это класс, а не функции и дескриптор. – Skurmedel

+0

Является ли моя статья неискренней? Я много раз тестировал C# и не мог найти правильный путь. Я не просто спрашиваю, не делая ничего. Я знаю, что сокет C# похож (я надеюсь, действительно), но нелегко заставить его работать так, как я ожидал. Спасибо, в любом случае. –

+0

Нет проблем, но не могли бы вы разместить свой текущий код на C#, чтобы мы могли с этим справиться? Это облегчает для всех, так как сейчас у вас, кажется, два разных вопроса, может быть, лучше разделить их на два разных вопроса. – Skurmedel

ответ

0

Заканчивать XF.Server гнездо библиотека по kodart для .net. Когда вы загружаете библиотеку, она поставляется с эхо-сервером в качестве примера реализации библиотеки Xf.Server. Это будет работать для вас.

www.kodart.com

Спасибо.

Смежные вопросы