xparet0209
Ensign
- Registriert
- Okt. 2007
- Beiträge
- 180
Hi CB'ler,
ich habe ein Server Programm das auf den String "login" Daten zurück liefert. Also habe ich folgende Methode aus einem Beispiel von MSDN kopiert und etwas umgeschrieben:
Wie man erkennt muss ich in der ersten Schleife warten, bis der Server Daten anfangt abzuschicken. In der zweiten Schleife muss ich den Stream immer wieder teilweise auslesen und an einen String anheften, da die Daten des Streams größer sind als der Buffer.
Allerdings scheint mir das ganze recht unelegant, daher meine Frage: Gibt es eine praktischere Lösung um auf die Antwort der Servers zu warten und dann in einem Zug auszulesen?
mfg xparet0209
ich habe ein Server Programm das auf den String "login" Daten zurück liefert. Also habe ich folgende Methode aus einem Beispiel von MSDN kopiert und etwas umgeschrieben:
PHP:
public static void Login(string server, int port)
{
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.
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("login");
// 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: login");
// 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.
do
{
//wait for answer of server
} while (!stream.DataAvailable);
while (stream.DataAvailable)
{
int bytes = stream.Read(data, 0, data.Length);
responseData += System.Text.Encoding.ASCII.GetString(data, 0, bytes);
}
Console.WriteLine("Recieved: {0}", responseData);
// Close everything.
//stream.Close();
//client.Close();
}
catch (ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
}
Allerdings scheint mir das ganze recht unelegant, daher meine Frage: Gibt es eine praktischere Lösung um auf die Antwort der Servers zu warten und dann in einem Zug auszulesen?
mfg xparet0209
Zuletzt bearbeitet: