Поток для получения данных с ip и порта - PullRequest
0 голосов
/ 26 ноября 2009

Я хотел бы написать программу для получения некоторых данных с использованием 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();
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 26 ноября 2009

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

http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.connected.aspx

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

while(tcpClient.Connected)
{
    // do something while conn is open
}
1 голос
/ 26 ноября 2009

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

...