Проблема с модулем "SimpleTCP" при создании приложения чата - PullRequest
1 голос
/ 24 марта 2019

Итак, я хотел создать приложение для чата на C #, я смотрел видео об этом (https://www.youtube.com/watch?v=ve2LX1tOwIM),. Я полностью скопировал код на данный момент, но когда я запускаю сервер, подключаю клиента к серверу и отправляюсообщение от клиента приводит к тому, что оно бесконечно отправляет сообщение как клиенту, так и серверу. Я не уверен, почему это происходит, поскольку код в точности такой, как показано в видео, которое я смотрел. Вы можете увидеть это в моем репозитории.

Если вы хотите увидеть код: Клиент:

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 SimpleTCP;

namespace Client
{
    public partial class ClientForm : Form
    {
        SimpleTcpClient client;

        public ClientForm()
        {
            InitializeComponent();
        }

        private void ClientForm_Load(object sender, EventArgs e)
        {
            client = new SimpleTcpClient();
            client.StringEncoder = Encoding.UTF8;
            client.DataReceived += Client_DataReceived;
        }

        private void Client_DataReceived(Object sender, SimpleTCP.Message e)
        {
            txtStatus.Invoke((MethodInvoker)delegate ()
            {
                txtStatus.Text += e.MessageString;
                e.ReplyLine(String.Format("You: {0}", e.MessageString));
            });
        }

        private void SendMessageInput_Click(object sender, EventArgs e)
        {
            client.WriteLine(MessageInput.Text);
        }

        private void StartInput_Click(object sender, EventArgs e)
        {
            StartInput.Enabled = false;
            client.Connect(HostInput.Text, Convert.ToInt32(PortInput.Text));
        }
    }
}

А это сервер:

using System;
using System.Net;
using System.Text;
using System.Windows.Forms;
using SimpleTCP;

namespace HyperChat
{
    public partial class ServerForm : Form
    {
        SimpleTcpServer server;

        public ServerForm()
        {
            InitializeComponent();
        }

        private void ServerForm_Load(object sender, EventArgs e)
        {
            server = new SimpleTcpServer();
            server.Delimiter = 0x13;
            server.StringEncoder = Encoding.UTF8;
            server.DataReceived += Server_DataReceived;
        }

        private void Server_DataReceived(object sender, SimpleTCP.Message e)
        {
            txtStatus.Invoke((MethodInvoker)delegate ()
            {
                txtStatus.Text += e.MessageString;
                e.ReplyLine(String.Format("You: {0}", e.MessageString));
            });
        }

        private void StartButton_Click(object sender, EventArgs e)
        {
            txtStatus.Text += "Server Started...";
            IPAddress ip = IPAddress.Parse(hostInput.Text);
            server.Start(ip, Convert.ToInt32(portInput.Text));
            StartButton.Enabled = false;
        }

        private void StopButton_Click(object sender, EventArgs e)
        {
            if (server.IsStarted)
            {
                server.Stop();
            }
        }
    }
}

Я был бы очень признателен за получениепомогите, я попытался испортить свой код, но он не работал, я хочу упомянуть, что в видео они сказали, что вам нужно подключиться, чтобы получить IP, который вы хотите подключить, используя:

System.Net.IPAddress ip = new System.Net.IPAddress(long.Parse(txtHost.Text))

Но это дает ошибки, и вам действительно нужно сделать следующее:

System.Net.IPAddress ip = System.Net.IPAddress.Parse(hostInput.Text);

Я ожидаю, что сервер отправит сообщение так, как должно, но по какой-то причине это не так.спасибо за помощьч это.Спасибо.

Ответы [ 2 ]

2 голосов
/ 24 марта 2019

Проблема в том, что у вас есть e.ReplyLine… как на клиенте, так и на сервере, удалите его с клиента, и ваш код должен работать.

Что происходит, так это то, что клиент отправляет сообщение, на которое сервер затем получает и отправляет ответ, клиент получает ответ, и в случае, если ваш код отправляет ответ на сервер, это приводит к получению сервером ответ и отправка ответа на это и так далее ...

0 голосов
/ 24 марта 2019

Таким образом, решение этого было объяснено @Chris Taylor, и когда он говорил, что я сделал то, что клиент отправил серверу сообщение, когда сервер получает сообщение, он отвечает сообщением, клиент отвечает ответ, который делает бесконечный цикл. Чтобы решить эту проблему, нужно было удалить строку на клиенте, которая отвечает серверу, и предотвратить цикл. Я действительно ценю помощь, спасибо Крис.

...