Вопрос

Я хотел бы написать программу для получения некоторых данных с использованием tcpClient с указанным ip и номером порта. В первый раз я сделал это с помощью while (true). Мой друг сказал мне использовать нить вместо цикла while. Так я и сделал, как он сказал.

public static void receiveThread()
{
    TcpClient tcpClient = new TcpClient();
    try
    {
        tcpClient.Connect(ipAddress, incPort);
        Console.WriteLine("Connection accepted ...");
    }
    catch (Exception e)
    {
        Console.WriteLine(e + "\nPress enter to exit...");
        Console.ReadKey();
        return;
    }
    NetworkStream stream = tcpClient.GetStream();
    StreamReader incStreamReader = new StreamReader(stream);

    try
    {
        data = incStreamReader.ReadLine();
        Console.WriteLine("Received data: {0}", data);
    }
    catch (Exception e)
    {
        Console.WriteLine(e + "\nPress enter to exit...");
    }
}

Работает нормально, но не так хорошо, как хотелось бы. Когда я запускаю свою программу и отправляю в нее, например, "Hello world" Строка, он получает его, а затем заканчивает работу и выходит. Я хочу сохранить поток для большего количества входящих данных, но я не знаю, как это сделать. Может, у меня есть подсказка, как это сделать?

Для отправки данных я использую это

using System;
using System.Net;
using System.Net.Sockets;
using System.IO;

public class Program
{
public static string ipAddress = "127.0.0.1";
public static int listenerPort = 6600;
public static string message;

static void Main(string[] args)
{
    TcpListener tcpListener = new TcpListener(IPAddress.Parse(ipAddress),listenerPort);
    tcpListener.Start();

    Socket socket = tcpListener.AcceptSocket();
    Console.WriteLine("Connection accepted...");
    while (true)
    {
        if (socket.Connected)
        {
            NetworkStream networkStream = new NetworkStream(socket);
            StreamWriter streamWriter = new StreamWriter(networkStream);

            message = Console.ReadLine();
            streamWriter.WriteLine(message);
            streamWriter.Flush();
        }
    }
}
Это было полезно?

Решение

Посмотрите на это свойство объекта TCPClient

http://msdn.microsoft .com / EN-US / библиотека / system.net.sockets.tcpclient.connected.aspx

вы можете использовать его как таковой

while(tcpClient.Connected)
{
    // do something while conn is open
}

Другие советы

Ваш друг попросил вас использовать тему, чтобы ваше основное приложение не было заблокировано. Теперь, когда вы создали новый поток, вы можете использовать цикл while внутри этого потока, как вы делали это раньше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top