Постоянно получать данные - PullRequest
0 голосов
/ 31 декабря 2018

так сделано клиент-сервер-клиент tcp / ip app в c #, который должен обмениваться данными между 2 компьютерами, находящимися в другой сети.

У меня мало проблем, во-первых, мой сервер не запускается на моих публичных высказываниях ip, в этом контексте он недопустим.Во-вторых, мне нужно дважды нажать кнопку отправки, прежде чем она отправит данные на сервер, а затем на сервер 2 варианта данных, один в байтах, другой в символьной, как это должно быть.И в-третьих, как заставить клиентов пытаться получать данные все время.Должен ли я иметь связь между клиентами, открытыми все время?Я попытался использовать таймеры, чтобы проверить, есть ли данные, которые будут получены с сервера.

Код сервера

static  void Main(string[] args)
{
          TcpListener  server = new TcpListener(IPAddress.Parse("192.168.0.13"), 8080);


        TcpClient client = default(TcpClient); 
        TcpClient client2 = default(TcpClient)
        try
        {

            server.Start();
            Console.WriteLine("Server started...");



        }
        catch(Exception ex)
        {
            Console.WriteLine("Server failed to start... {0}",ex.ToString());

            Console.Read();

        }

        while (true)
        {


            client = server.AcceptTcpClient(); /                   
            byte[]   receivedBuffer = new byte[1000];                

            NetworkStream stream = client.GetStream();

            stream.Read(receivedBuffer,0,receivedBuffer.Length);               
            StringBuilder message = new StringBuilder();                    foreach (byte b in receivedBuffer)  
               {
                    if (b.Equals(126)
                    ) //proveramo  d                        {
                        break;
                    }
                    else
                    {
                        message.Append(Convert.ToChar(b).ToString());                        }

                }


            client2 = server.AcceptTcpClient();
            byte[] receivedBuffer2 = new byte[1000];
            NetworkStream stream2 = client2.GetStream();
            stream2.Read(receivedBuffer2, 0, receivedBuffer2.Length);
            StringBuilder message2 = new StringBuilder();
            foreach (byte g in receivedBuffer2)
            {
                if (g.Equals(126))
                {
                    break;
                }
                else
                {
                    message2.Append(g);
                }
            }

                stream2.Write(receivedBuffer, 0, receivedBuffer.Length);                      
                stream.Write(receivedBuffer2,0,receivedBuffer2.Length);                  
                Console.WriteLine(message2.ToString());
                Console.WriteLine(message.ToString());
        }

Код клиента

public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
        timer1.Start();
    }

    private int port = 8080;
    private void submit_Click(object sender, EventArgs e)
    {

        TcpClient client = new TcpClient("192.168.0.13",port);
        TcpListener listener = new TcpListener(IPAddress.Parse("192.168.0.13"), port);
        long byteCount = Encoding.ASCII.GetByteCount(messagebox_TB.Text + 1);            byte[] sentDataBytes = new byte[byteCount];
        sentDataBytes = Encoding.ASCII.GetBytes(messagebox_TB.Text + "~"); 

        NetworkStream stream = client.GetStream();

        stream.Write(sentDataBytes,0,sentDataBytes.Length);                       

        stream.Close();

        client.Close();



    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {

    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        long a = 0;
        try
        {

            TcpClient client = new TcpClient("192.168.0.13", port);
            TcpListener listener = new TcpListener(IPAddress.Parse("192.168.0.13"), port);
            NetworkStream stream = client.GetStream();
            byte[] receviedBytes = new byte[100];
            stream.Read(receviedBytes, 0, receviedBytes.Length);

            StringBuilder
                message = new StringBuilder();
            foreach (byte b in receviedBytes)                {
                if (b.Equals(126)
                ) //proveramo                      {
                    break;
                }
                else
                {
                    message.Append(Convert.ToChar(b).ToString());                    }

            }

            textBox1.Text = message.ToString();
            client.Close();
            stream.Close();
        }
        catch
        {
            a++;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...