Hallo,
ich habe ein Problem beim Empfangen von Daten über eine Socketschnittstelle.
Sende ich Daten empfange ich mal etwas, also ich seh den Text dann in meiner MessageBox und ein anderes mal nicht (leere MessageBox).
So kann es vorkommen dass ich 4 mal nichts bekomme, dann wieder etwas und dann 3 mal wieder nichts.
Hate jemand von euch vielleicht eine Ahnung woran dass liegen könnte.
Oder weiß jemand was ich vielleicht testen könnte.
public void Server()
{
try
{
myListener = new TcpListener(localAddr, port);
myListener.Start();
Thread myThread = new Thread(new ThreadStart(StartListen));
myThread.Start();
}
catch (Exception ex)
{
MessageBox.Show("An Exception Occurred while Listening : " + ex.Message);
}
}
public void StartListen()
{
while (true)
{
Socket mySocket = myListener.AcceptSocket();
if (mySocket.Connected)
{
//MessageBox.Show(System.Convert.ToString(mySocket.RemoteEndPoint));
Byte[] bReceive = new Byte[mySocket.Available];
mySocket.Receive(bReceive, 0, mySocket.Available, SocketFlags.None);
string sBuffer = Encoding.ASCII.GetString(bReceive);
MessageBox.Show(sBuffer);
}
Pruef mal bei Sender, ob Du auch Flush aufrufst oder AutoFlush gesetzt hast.
Hallo,
es ist wohl eher seltsam, dass Du überhaupt etwas empfängst.
Lass Dir mal "mySocket.Available" ausgeben. Das wird in den meisten Fällen 0 sein. Das liegt einerseits daran, dass Du den Wert direkt nach dem Verbinden prüfst und daran, dass Du andererseits nach jedem Lesen den aktuellen Socket verwirfst (damit auch dessen Daten) und auf eine neue Verbindung wartest.
Es gibt hier im Forum genügend Tutorials für TCP-Verbindungen - such einfach mal danach.
Danke für eure schnellen Antworten.
Ich habe es jetzt wie folgt verändert.
Jetzt ist es so dass der erste Werte den ich nach dem Connect sende nicht angezeigt wird. Alle weiteren bekomme ich jetzt aber in meiner MessageBox.
Woran könnte dass noch liegen?
public void StartListen()
{
int bytes = 0;
while (true)
{
Socket mySocket = myListener.AcceptSocket();
if (mySocket.Connected)
{
Byte[] bReceive = new Byte[256];
bytes = mySocket.Receive(bReceive, bReceive.Length, 0);
string sBuffer = Encoding.ASCII.GetString(bReceive, 0, bytes);
MessageBox.Show(sBuffer);
}
}
}