Здравейте, момчета, опитвам се да науча как да изпращам прости текстови съобщения между клиентски сървър с помощта на TcpListener и сокети. Прочетох много теми, които изглежда показват как да се чете _Buffer в, да речем, цикъл, за да се гарантира, че цялото съобщение е прочетено. Изглежда обаче не мога да разбера как да получа второто съобщение след получаване на първото. Мога да се свържа със сървъра добре и мога да получа първото съобщение съвсем добре. Ако обаче отново натисна бутона за изпращане на моя клиент, никакво съобщение не достига до сървъра. Ето моят код:
// SERVER APPLICATION: -----------------------------------------------namespace TCP_Server { public partial class 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(); } } }
}
Ще съм много благодарен, ако някой може да обясни как да направя това, за да мога да получа повече от едно съобщение. Имам малко опит в използването на Задачи и нишки, това ли е нещо, което трябва да направя? Просто се опитвам да разбера това, за да мога да започна да го уча. Ако някой има препоръки или примери, които смятате, че могат да помогнат, моля, споделете.