Hi!
ich habe mittlerweile den Link oben und noch paar andere anschaut zwecks Text versenden und mein Programm startet nun auch als Server mit einem Knopfdruck und kann sich auch mit sich selbst als Client verbinden auf Knopdruck und per IP-Angabe.
Das habe ich mir durch den Process-Explorer visualisieren und validieren lassen
Ich schaffe es nur nicht, jetzt irgendwie Text an das Programm selbst zu senden. Schließlich soll später noch jemand anderes das Programm bekommen. Einer muss dann der Server sein und die anderen kriegen seine IP und der Server schickt den text von jedem an jeden. Und wenn einer mal nicht da ist, dann spielt ein anderer User mit dem Programm halt den Server und so weiter.
Wenn ich jetzt mit NetworkStream clientStream = client.GetStream(); auf den Netzwerkstream zugreifen will steigt mein Programm im Debugmodus einfach aus.. heißt das Programm an sich läuft auch, aber ich kann mit dem Debugger nicht mehr Debuggen.. in Visual C# Express verschwindet die gelbe Zeile :-| . Ich weiss jetzt nicht ob das Programm so funktioniert,also Text sendet oder nicht.
Hoffe mir kann jemand sagen, was das Problem ist.. habe jetzt Stunden damit verbracht und komme nicht darauf..
Habe den interessanten Part als Code mal hier reingesetzt.. sieht viel aus, aber mich interessiert nur warum das Getstream nicht funktioniert bzw. was ich da falsch mache.
Also ich starte das Programm als Server:
C#:
private void button1_Click(object sender, EventArgs e)
{
// Listener initialisieren und starten
try
{
st = new ServerThread();
Thread th = new Thread(new ThreadStart(st.thread_starten));
th.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Das ist der Thread..der gestartet wird. Interessant ist hier erstmal die While-Schleife.. das funktioniert auch soweit mit der Verbindung herstellen.
C#:
class ServerThread
{
// Stop-Flag
public bool stop = false;
// Flag für "Thread läuft"
public bool running = false;
TcpListener listener = new TcpListener(IPAddress.Any, 4711);
// Listener starten
// Die Verbindung zum Client
TcpClient tcpClient = null;
Thread clientThread;
String Hand;
bool loop = true;
// Der eigentliche Thread
public void thread_starten()
{
try
{
// Listener starten
listener.Start();
while (loop)
{
TcpClient tcpclient = listener.AcceptTcpClient();
running = true;
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
clientThread.Start(tcpclient);
}
NetworkStream clientStream = tcpClient.GetStream();
ASCIIEncoding encoder = new ASCIIEncoding();
byte[] buffer = encoder.GetBytes("Hello Client!");
clientStream.Write(buffer, 0, buffer.Length);
clientStream.Flush();
}
catch (Exception)
{
}
}
private void HandleClientComm(object client)
{
TcpClient tcpClient = (TcpClient)client;
NetworkStream clientStream = tcpClient.GetStream();
byte[] message = new byte[4096];
int bytesRead;
while (true)
{
bytesRead = 0;
try
{
//blocks until a client sends a message
bytesRead = clientStream.Read(message, 0, 4096);
}
catch
{
//a socket error has occured
break;
}
if (bytesRead == 0)
{
//the client has disconnected from the server
break;
}
//message has successfully been received
ASCIIEncoding encoder = new ASCIIEncoding();
System.Diagnostics.Debug.WriteLine(encoder.GetString(message, 0, bytesRead));
}
tcpClient.Close();
}
}
Die Verbindung stelle ich mit der gleichen Instanz des gleichen Programms her über einen Button dessen Code lautet:
C#:
try
{
Server_IP = txt_server_ip.Text;
// Client initialisieren und mit dem Server verbinden
//TcpClient server = new TcpClient(Server_IP, 4711);
// Stream für lesen und schreiben holen
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse(Server_IP), 4711);
TcpClient client = new TcpClient(serverEndPoint);
client.Connect(serverEndPoint);
NetworkStream clientStream = client.GetStream(); //Hier steigt der Debugger einfach aus
ASCIIEncoding encoder = new ASCIIEncoding();
byte[] buffer = encoder.GetBytes("Hello Server!");
clientStream.Write(buffer, 0, buffer.Length);
clientStream.Flush();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Hoffe da blickt jemand durch... danke schonmal für eure Hilfe.