Ich bin auf einem Client-Server-Ende arbeiten und bin nicht allzu vertraut mit # .net und C, frage mich, wie ich über den Anschluss von mehreren Clients auf dem gleichen Server gehen. Würde es vorziehen, TcpClient weiter zu verwenden, wenn ich kann.C# Wie würde ich mich über mehrere Clients auf den gleichen Server zu verbinden?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
using Microsoft.VisualBasic;
using System.Runtime.Serialization.Formatters.Binary;
using System.Threading;
namespace TFServerClient
{
public partial class Form1 : Form
{
private TcpClient client;
public StreamReader STR;
public StreamWriter STW;
public string receive;
public String text_to_send;
TcpListener listener;
public Form1()
{
InitializeComponent();
IPAddress[] localIP = Dns.GetHostAddresses(Dns.GetHostName()); //gets my IP
foreach(IPAddress address in localIP)
{
if(address.AddressFamily == AddressFamily.InterNetwork)
{
txtIPServer.Text = address.ToString();
}
}
}
private void btnStartServer_Click(object sender, EventArgs e)
{
ListenBackground.RunWorkerAsync();
}
private void ReceiveData_DoWork(object sender, DoWorkEventArgs e)
{
while(client.Connected)
{
try
{
receive = STR.ReadLine();
this.txtChat.Invoke(new MethodInvoker(delegate() { txtChat.AppendText("You: " + receive + "\n"); }));
receive = "";
}
catch (Exception x)
{
MessageBox.Show(x.Message.ToString());
}
}
}
private void SendData_DoWork(object sender, DoWorkEventArgs e)
{
if(client.Connected)
{
STW.WriteLine(text_to_send);
this.txtChat.Invoke(new MethodInvoker(delegate() { txtChat.AppendText("Me: " + text_to_send + "\n"); }));
}
else
{
MessageBox.Show("Send failed");
}
SendData.CancelAsync();
}
private async void ListenBackground_DoWork(object sender, DoWorkEventArgs e)
{
this.txtChat.Invoke(new MethodInvoker(delegate() { txtChat.AppendText("Awaiting Connection...\n"); }));
client = listener.AcceptTcpClient();
this.txtChat.Invoke(new MethodInvoker(delegate() { txtChat.AppendText("Client Connected.\n"); }));
STR = new StreamReader(client.GetStream());
STW = new StreamWriter(client.GetStream());
STW.AutoFlush = true;
ReceiveData.RunWorkerAsync(); //Start recieving data in background
SendData.WorkerSupportsCancellation = true; //able to cancel thread
}
private void btnConnect_Click(object sender, EventArgs e)
{
client = new TcpClient();
IPEndPoint IP_End = new IPEndPoint(IPAddress.Parse(txtIPClient.Text), int.Parse(txtPortClient.Text));
try {
client.Connect(IP_End);
if(client.Connected)
{
txtChat.AppendText("Connected To Server " + "\n");
STW = new StreamWriter(client.GetStream());
STR = new StreamReader(client.GetStream());
STW.AutoFlush = true;
ReceiveData.RunWorkerAsync(); //Start recieving data in background
SendData.WorkerSupportsCancellation = true; //able to cancel thread
}
} catch(Exception x)
{
MessageBox.Show(x.Message.ToString());
}
}
private void btnSend_Click(object sender, EventArgs e)
{
if(txtMessage.Text != "")
{
text_to_send = txtMessage.Text;
SendData.RunWorkerAsync();
}
txtMessage.Text = "";
}
}
}
Sie haben Code und erläutert, was Sie arbeiten, aber Sie haben nicht in Bezug auf den aktuellen Code angegeben, was das Problem ist .. bitte bearbeiten Sie die Frage und was zu sagen das vorhandene Problem, das bei dem aktuellen Code auftritt. 'Dies ist keine Code Factory Service-Seite ..! – MethodMan
Wenn du deine App zweimal öffnest und sie anschließt, dann hast du mehrere verbundene Clients ... hast du das gemeint? – Gusman
Aktueller Code erlaubt nur einem Client, sich zu verbinden und stoppt dann. Ich muss herausfinden, wie mehrere Clients mit dem Chat-Server verbunden sind. Was ich nicht herausfinden kann, wie es geht. Das Öffnen von mehreren funktioniert nicht, da mein Code nur auf einen hört. –