Pergunta

Eu gostaria de escrever um programa para receber alguns dados usando TcpClient de um número de IP e porta especificada. Primeira vez que eu fiz isso usando while (true). Um amigo meu me disse para usar fio em vez de loop while. Então eu fiz o que ele disse.

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...");
    }
}

funciona bem, mas não tão bom como eu gostaria que ele funcione. Quando eu estou correndo meu programa e enviar a ele para exaple "Olá, mundo" string, ele recebe-lo e depois de terminar o trabalho e sair. Eu quero manter a linha para cima de mais dados de entrada, mas não sei como fazê-lo. Talvez alguém tem uma pista para mim como fazê-lo?

Para enviar dados Im usando este

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();
        }
    }
}
Foi útil?

Solução

Tenha um olhar para esta propriedade do TCPClient objeto

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

Você pode usá-lo como tal

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

Outras dicas

Seu amigo teve de utilizar um fio para que seu aplicativo principal não estava trancado. Agora que você criou um novo tópico, você pode usar um tempo loop dentro de esse segmento como você estava fazendo anteriormente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top