J'essaie d'envoyer des données via la connexion tcpClient pour faire fonctionner un périphérique qui reçoit une entrée et effectue l'opération requise. Sur le serveur, les données sont reçues dans une boucle et les valeurs sont définies dans un tableau. Le code ressemble à ceci:écriture continue de données en utilisant tcpClient
client = server.available();
//Receive Data
while(client.available()){
for(int i = 7; i<11; ++i){
String msg = client.readStringUntil('\n');
senddata[i] = msg.toInt();
msg ="";
}
Ma fonction côté client ressemble à ceci:
static void Connect(String server, String message)
{
try
{
// Create a TcpClient.
// Note, for this client to work you need to have a TcpServer
// connected to the same address as specified by the server, port
// combination.
Int32 port = 85;
TcpClient client = new TcpClient(server, port);
// Translate the passed message into ASCII and store it as a Byte array.
Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
// Get a client stream for reading and writing.
// Stream stream = client.GetStream();
NetworkStream stream = client.GetStream();
// Send the message to the connected TcpServer.
stream.Write(data, 0, data.Length);
Console.WriteLine("Sent: {0}", message);
// Receive the TcpServer.response.
// Buffer to store the response bytes.
data = new Byte[256];
// String to store the response ASCII representation.
String responseData = String.Empty;
// Read the first batch of the TcpServer response bytes.
Int32 bytes = stream.Read(data, 0, data.Length);
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
Console.WriteLine("Received: {0}", responseData);
// Close everything.
stream.Close();
client.Close();
}
catch (ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
Console.WriteLine("\n Press Enter to continue...");
Console.Read();
}
Je veux être capable d'écrire des données en continu avant de fermer la connexion. Essentiellement quelque chose comme ceci:
int[] data = new int[4];
data[0] = 1;
data[0] = 1;
data[0] = 1;
data[0] = 1;
for (int i = 0; i < data.Length; i++)
{
Connect("192.168.1.125", data[i].ToString());
}
Actuellement, les données sont envoyées et la connexion est fermée et le serveur ne reçoit pas plus de données à traiter. J'ai essayé différentes solutions mais sans aucune chance.
Modifier
J'ai essayé de courir le code ci-dessous dans une boucle qui écrit des données à flux:
for (int i = 0; i < 4; i++)
{
stream.Write(data, 0, data.Length);
Console.WriteLine("Sent: {0}", message);
// Receive the TcpServer.response.
// Buffer to store the response bytes.
data = new Byte[256];
// String to store the response ASCII representation.
String responseData = String.Empty;
// Read the first batch of the TcpServer response bytes.
Int32 bytes = stream.Read(data, 0, data.Length);
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
Console.WriteLine("Received: {0}", responseData);
}
// Close everything.
stream.Close();
client.Close();
Je reçois l'erreur suivante: Additional information: Unable to read data from the transport connection: An established connection was aborted by the software in your host machine.
, vous fermez la connexion du côté client, pourquoi ne pas garder la connexion ouverte jusqu'à ce qu'une demande de fermeture est envoyé du serveur/client ? – Icepickle
Je n'arrive pas à écrire des données si je ne ferme pas la connexion immédiatement après avoir lu la réponse du serveur. Je reçois une sorte d'erreur –
Que diriez-vous d'ajouter cette erreur à la question? – Icepickle