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);
Le code ci-dessus fait partie du serveur d'écho simple écrit en C++. Les problèmes que je suis face sont ...Je souhaite transférer un serveur d'écho C++ simple vers C#
- Comment définir la valeur de délai d'attente et temps de détection délai est expiré?
- Comment détecter la déconnexion de la prise?
Veuillez me laisser montrer du code en C#. Merci.
ajouté >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Une partie de mon code C# est suivi .. .
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);
}
Donc, votre question est plus "écrire ceci pour moi" que "s'il vous plaît aidez à écrire ceci"? :) Je suggérerais de faire un essai et de revenir quand vous faites face à des problèmes réels liés à C#. .NET a une classe Socket qui fonctionne très bien comme n'importe quelle autre socket, sauf que c'est une classe et non des fonctions et un handle. – Skurmedel
Mon article semble-t-il pas sincère? J'ai testé plusieurs fois en utilisant C# et je n'ai pas trouvé le bon chemin. Je ne demande pas seulement sans rien faire. Je sais que le socket de C# est similaire (j'espère vraiment) mais ce n'est pas facile de le faire fonctionner comme prévu. Merci quand même. –
Pas de problème, mais pourriez-vous poster votre code C# actuel afin que nous puissions travailler avec cela? Il est plus facile pour tout le monde, car il semble que vous ayez maintenant deux questions différentes, il serait peut-être préférable de les séparer en deux questions différentes. – Skurmedel