2009-06-18 10 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); 

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#

  1. Comment définir la valeur de délai d'attente et temps de détection délai est expiré?
  2. 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); 

} 
+0

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

+0

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. –

+0

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

Répondre

0

bibliothèque socket Check out XF.Server par kodart pour .net. Lorsque vous téléchargez la bibliothèque, elle est fournie avec un serveur echo comme exemple d'implémentation de la bibliothèque Xf.Server. Cela fonctionnera pour vous.

www.kodart.com

Merci.

Questions connexes