Ich habe die folgenden paar Videos zum Erstellen einer TCP/IP-Verbindung angeschaut: Server und Client Was ich tun muss, ist ein Spiel (Flipcard) in erstellen Ich sende nur 2 Koordinaten für eine Matrix. Nichts mehr. Oder weniger.TCP/IP Kontinuierlich Nachricht empfangen, ohne die Verbindung zu schließen
(der Code folgt)
Von dem, was ich beobachtet habe, er schließt und wieder öffnet die Verbindung, jedes Mal wenn er eine Nachricht senden. Es funktioniert. Aber was kann ich in den Code ändern, um die Verbindung offen und zu erkennen, wenn eine Nachricht eintraf?
Alle meine Google-Suche brachte mich auf diese zwei Methoden:
- I have had luck using the socket object directly (rather than the TCP client). (Aber ich will nicht Steckdosen verwenden)
- Also uses sockets
Wenn ich das starten klicken Server
private void bStartServer_Click(object sender, EventArgs e)
{
Thread tcpServerRunThread = new Thread(new ThreadStart(TCPServerRun));
tcpServerRunThread.Start();
}
Server läuft und wartet auf eine Verbindung
private void TCPServerRun()
{
TcpListener tcpListener = new TcpListener(IPAddress.Any, 2016);
tcpListener.Start();
updateUI("Listening");
while (true)
{
TcpClient client = tcpListener.AcceptTcpClient();
updateUI("Connected");
Thread tcpHandlerThread = new Thread(new ParameterizedThreadStart(tcpHandler));
tcpHandlerThread.Start(client);
}
}
Ich behandle meine Botschaft
private void tcpHandler(object client)
{
TcpListener tcpListener = new TcpListener(IPAddress.Any, 5004);
TcpClient mClient = (TcpClient)client;
NetworkStream stream = mClient.GetStream();
byte[] message = new byte[1024];
stream.Read(message,0, message.Length);
updateUI("New message = " + Encoding.ASCII.GetString(message));
stream.Close();
mClient.Close();
}
HINWEIS: updateUI
eine Funktion, die durch ihn zu aktualisieren, ein ListBox Artikel
gemacht ist Client-Seite - fast wie die Serverseite `private void button1_Click (Objekt Absender, EventArgs e) { Thread mThread = neuer Thread (neuer ThreadStart (ConnectAsClient)); mThread.Start(); }
private void ConnectAsClient()
{
// aici putem inlocui cu adresa de IP dorita
//client.Connect(IPAddress.Parse(textBox.Text), 5004);
client = new TcpClient();
//client.Connect(IPAddress.Parse("127.0.0.1"), 2016); // for when I'm not connected to network
client.Connect(IPAddress.Parse("my_ip_here"), 2016); // for when I am connected to the network
updateUI("connected");
NetworkStream stream = client.GetStream();
string s = "Hello world!";
byte[] message = Encoding.ASCII.GetBytes(s);
stream.Write(message, 0, message.Length);
this.updateUI("Message sent!");
stream.Close();
// client.Close();
}`
Wenn ich mich nicht falsch, verbindet jedes Mal er wieder schafft er eine neue Verbindung, und die alten nicht öffnen, nicht wahr? (Es ist mein erstes Mal, TCP/IP, auf meinem eigenen Lernen, so dass ich lieber nicht Sockets verwenden, wenn möglich)
----------------- -------------------------------------------------- ----
Voll Link zu meinem Code (slighty von den am Anfang vorgesehen Videos modifiziert):
Sie müssen es nicht schließen. aber wenn ich mich recht erinnere, müssen Sie eine Antwortnachricht an den Client senden, bevor Sie die nächste Nachricht empfangen können – Steve