Привет, ребята, я пытался научиться отправлять простые текстовые сообщения между клиентским сервером с помощью TcpListener и сокетов. Я прочитал много потоков, которые, кажется, показывают, как читать _Buffer, скажем, в цикле, чтобы убедиться, что все сообщение прочитано. Однако я не могу понять, как получить второе сообщение после получения первого. Я могу нормально подключиться к серверу и получить первое сообщение. Однако, если я снова нажму кнопку отправки на своем клиенте, сообщение не будет доставлено на сервер. Вот мой код:
// SERVER APPLICATION: -----------------------------------------------пространство имен TCP_Server { общедоступный частичный класс Form1 : Form { public Form1() { InitializeComponent(); }
private void btnStartServer_Click(object sender, EventArgs e) { // Define the TCP Listner: TcpListener _listner = new TcpListener(IPAddress.Parse("127.0.0.1"), 7777); // Start The Listner: _listner.Start(); //Show the server is now listening: listStatus.Items.Add("Server started - Listening on port 7777"); //Create a socket to accept - This is a Blocking Call: Socket _sock = _listner.AcceptSocket(); //When Client Connects show server has accepted the socket: listStatus.Items.Add("User from IP " + _sock.RemoteEndPoint); while (_sock.Connected) { // Create Byte to Receive Data: byte[] _Buffer = new byte[1024]; // Create integer to hold how large the Data Received is: int _DataReceived = _sock.Receive(_Buffer); // Lets Server Know Message is Received: listStatus.Items.Add("Message Received..."); // Convert Buffer to a String: string _Message = Encoding.ASCII.GetString(_Buffer); // Post Message to the Server Window: listStatus.Items.Add(_Message); _sock.Close(); } } }
}
// CLIENT APPLICATION: ----------------------------------------------------
namespace TCP__Client { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
// Defind the TCP Client: TcpClient _Client = new TcpClient(); private void btnConnect_Click(object sender, EventArgs e) { // Connect the TCP Client: _Client.Connect("127.0.0.1", 7777); // Show the Client has Connected: listStatus.Items.Add("Connected to Server 127.0.0.1"); } private void btnSend_Click(object sender, EventArgs e) { while (_Client.Connected) { // Create a Stream: Stream _Stream = _Client.GetStream(); // Create Instance of an Encoder: ASCIIEncoding _Asc = new ASCIIEncoding(); byte[] _Buffer = new byte[1024]; // Create Buffer to Send Message: _Buffer = _Asc.GetBytes(txtMessage.Text); // Show Client is Sending Message: listStatus.Items.Add("Tranmitting Message..."); // Write Message to the Stream: _Stream.Write(_Buffer, 0, _Buffer.Length); // Close Stream _Stream.Close(); _Stream.Dispose(); } } }
}
Я был бы очень признателен, если бы кто-нибудь объяснил, как это сделать, чтобы я мог получить более одного сообщения. У меня есть небольшой опыт использования задач и многопоточности, нужно ли мне это делать? Я просто пытаюсь понять это, чтобы начать изучать его. Если у кого-то есть какие-либо рекомендации или примеры, которые, по вашему мнению, могут помочь, пожалуйста, поделитесь.