Ich beschäftige mich momentan mit Client und Server verbindungen.
Die Idee:
Ich möchte das der Client sich am Server erstmal "vorstellen" tut
also hab ich gedacht ich bastle mir mal etwas zurecht.
Klappt auch alles soweit Daten werden vom Client gesendet und am Server empfangen.
Das Problem ist ich kann ja nie wissen wie lang z.B eine E-Mail oder ein Username ist somit kann ich den Server nicht sagen wieviele Bytes er auslesen soll. Dann kam mir die Idee "receivebuffer" beim Client fest zulegen mit der genauen länge des Strings der gesendet wird
im Server kommt dann aber nicht z.B 10Bytes raus sondern 65536 bytes d.h er liest mir 65536 Bytes aus dem Stream wovon aber nur 10 Bytes beschrieben sind die anderen sind leer.
Nun wie kann ich vom Client ausgehen senden wie viele Bytes es sind damit der Server auch die genaue Anzahl ausliest?
Hier der momentane Test Code wirrwarr
Client:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
//////////////////////////////////////////
// CLIENT //
/////////////////////////////////////////
namespace Client {
class Program {
static TcpClient clientSocket = new TcpClient();
static NetworkStream serverStream = default(NetworkStream);
static string readData = null;
static void Main(string[] args) {
Console.WriteLine("Client started.");
Console.WriteLine("Client connecting to 127.0.0.1:2525");
byte[] byteToServerAuth = Encoding.ASCII.GetBytes("Conan_Doyl");
clientSocket.ReceiveBufferSize = byteToServerAuth.Length;
clientSocket.Connect("127.0.0.1", 2525);
serverStream = clientSocket.GetStream();
serverStream.Write(byteToServerAuth, 0, byteToServerAuth.Length);
serverStream.Flush();
Console.ReadKey();
}
}
}
Server:
public static void WaitForConnections() {
TcpListener serverSocket = new TcpListener(IPAddress.Any, 2525);
// List<Tuple<TcpClient, string, string>> clients = new List<Tuple<TcpClient, string, string>>();
//clients.Add(new Tuple<TcpClient, string, string>(clientSocket, "", ""));
TcpClient clientSocket = default(TcpClient);
string dataFromClient = null;
serverSocket.Start();
while (true) {
clientSocket = serverSocket.AcceptTcpClient();
NetworkStream stream = clientSocket.GetStream();
byte[] bytesAuth = new byte[10]; // Hier müsste ich die genau Bytezahl wissen die gesendet wurde.
do {
stream.Read(bytesAuth, 0, clientSocket.ReceiveBufferSize); // Hier müsste ich die genau Bytezahl wissen die gesendet wurde.
dataFromClient = Encoding.ASCII.GetString(bytesAuth);
msg(dataFromClient);
} while (stream.DataAvailable);
}
}