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#
- Как установить значение тайм-аута и определить время ожидания?
- Как обнаружить разъединение разъема?
Просьба указать код на 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);
}
Итак, ваш вопрос более «напишите мне для меня», чем «пожалуйста, помогите написать это»? :) Я бы предложил попробовать и вернуться, когда вы сталкиваетесь с актуальными проблемами, связанными с C#. .NET получил класс Socket, который очень похож на любой другой сокет, за исключением того, что это класс, а не функции и дескриптор. – Skurmedel
Является ли моя статья неискренней? Я много раз тестировал C# и не мог найти правильный путь. Я не просто спрашиваю, не делая ничего. Я знаю, что сокет C# похож (я надеюсь, действительно), но нелегко заставить его работать так, как я ожидал. Спасибо, в любом случае. –
Нет проблем, но не могли бы вы разместить свой текущий код на C#, чтобы мы могли с этим справиться? Это облегчает для всех, так как сейчас у вас, кажется, два разных вопроса, может быть, лучше разделить их на два разных вопроса. – Skurmedel