Sto provando a fare un server e programmi client, che comunicano tra loro, ma non riesco a capire il modo migliore per farlo, quindi lasciami spiegare cosa mi serve:
- L'app Server dovrebbe essere in grado di accettare sia i file che altre informazioni (come gli array di stringhe, se possibile) dall'app client.
- L'app client deve essere in grado di ricevere comandi dall'app Server (come SEND_REPORT, STOP_SELF ....)
- L'intera comunicazione server-client deve essere diretta
Ho provato a utilizzare un server FTP per questo, ma per farlo è necessario un programma di terze parti (a meno che non crei da solo la mia app Server un server FTP). Così ora sto provando a farlo con TcpClient e NetworkStream, ma ho capito che non ci sarebbe stato modo di distinguere se le informazioni inviate sono un file o una semplice serie di stringhe.
Ecco quello che ho finora, il codice lato server:
private void handleClient(TcpClient client) {
NetworkStream stream = client.GetStream();
stream.WriteByte(1);
FileStream fileStream = File.Open(le_path, FileMode.Create);
int read;
int totalRead = 0;
byte[] buffer = new byte[1024];
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) {
fileStream.Write(buffer, 0, read);
totalRead += read;
}
fileStream.Dispose();
client.Close();
}
Questo codice crea un file, ma è bug, o non lo so, non lascia mai il ciclo while e non va mai a Dispose and Close ... Posso accedere al file quando chiudo il programma.
Ecco il codice dell'app client:
client = new TcpClient();
client.Connect(serverIP, serverPort);
byte[] file = File.ReadAllBytes(Constants.TARGET_PATH_LOGS + "squad.jpg");
byte[] fileBuffer = new byte[file.Length];
NetworkStream stream = client.GetStream();
stream.Write(file, 0, fileBuffer.GetLength(0));
Quindi ecco cosa ti sto chiedendo:
- Se questo è il modo migliore per farlo, come posso fare in modo che il codice di ricezione riconosca se si tratta di un file inviato, o di un semplice elenco di dati di array, e come posso renderlo in grado di accettare qualsiasi file (che significa ottenere correttamente il nome, i metadati ...)
- In caso contrario, per favore dimmi un altro modo per fare ciò di cui ho bisogno.