C # – envoyer, recevoir et envoyer à nouveau via un socket

Mon ami et moi réalisons une application client / serveur de base sur deux ordinateurs différents. Ce que nous essayons de faire:

1.Je lui envoie une chaîne (en tant que serveur)

2 Il me renvoie une autre corde,

  1. Je l’édite et le renvoie.

Mais chaque fois que nous arrivons à la partie 3, il ne reçoit rien que mon logiciel arrête de fonctionner et via le débogage, je me retrouve avec

"{"A request to send or receive data was disallowed because the socket had already been shut down in that direction with a previous shutdown call"} 

Je suis sûr que la faute est de mon côté, voici les fonctions que j’utilise:

 private static void SendCallback(IAsyncResult ar) { try { // Resortingeve the socket from the state object. Socket handler = (Socket)ar.AsyncState; // Complete sending the data to the remote device. int bytesSent = handler.EndSend(ar); Console.WriteLine("Sent {0} bytes to client.", bytesSent); handler.Shutdown(SocketShutdown.Both); // handler.Close(); sendDone.Set(); } catch (Exception e) { Console.WriteLine(e.ToSsortingng()); } } private static void Send(Socket handler, Ssortingng data) { // Convert the ssortingng data to byte data using ASCII encoding. byte[] byteData = Encoding.ASCII.GetBytes(data); // Begin sending the data to the remote device. handler.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendCallback), handler); } private static void Receive(Socket client) { try { // Create the state object. StateObject state = new StateObject(); state.workSocket = client; // Begin receiving the data from the remote device. client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state); } catch (Exception e) { Console.WriteLine(e.ToSsortingng()); } } private static void ReceiveCallback(IAsyncResult ar) { try { // Resortingeve the state object and the client socket // from the asynchronous state object. StateObject state = (StateObject)ar.AsyncState; // Socket client = state.workSocket; // Read data from the remote device. int bytesRead = s.EndReceive(ar); if (bytesRead > 0) { // There might be more data, so store the data received so far. state.sb.Append(Encoding.ASCII.GetSsortingng(state.buffer, 0, bytesRead)); // Get the rest of the data. s.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state); } else { // All the data has arrived; put it in response. if (state.sb.Length > 1) { response = state.sb.ToSsortingng(); } // Signal that all bytes have been received. receiveDone.Set(); } } catch (Exception e) { Console.WriteLine(e.ToSsortingng()); } } 

Je connet avec le client via

  IPAddress ipAd = IPAddress.Parse("my_actual_ip_adress"); // use local m/c IP address, and // use the same in the client /* Initializes the Listener */ TcpListener myList = new TcpListener(ipAd, 8001); /* Start Listeneting at the specified port */ myList.Start(); 

Je me rends compte que cela ressemble probablement à une question idiote, mais nous avons du mal à trouver une solution réelle, toute aide serait très appréciée.

J’ai réussi à le réparer! Il s’avère que nous devions nous débarrasser de handler.Shutdown (SocketShutdown.Both) et ensuite changer la façon dont le client recevait les données, car il attendait que le socket se ferme.
– certains