문제

지정된 IP 및 포트 번호에서 tcpclient를 사용하여 일부 데이터를 수신하기 위해 프로그램을 작성하고 싶습니다. 처음으로 (true)를 사용했습니다. 내 친구는 나에게 while loop 대신 스레드를 사용하라고 말했다. 그래서 나는 그가 말한대로했다.

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

잘 작동하지만 작동하고 싶은만큼 좋지는 않습니다. 내 프로그램을 실행하고 Exaple "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/library/system.net.sockets.tcpclient.connected.aspx

당신은 그것을 사용할 수 있습니다

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

다른 팁

친구에게는 스레드를 사용하여 기본 응용 프로그램이 잠겨 있지 않았습니다. 새 스레드를 만들었으므로 이전에했던 것처럼 해당 스레드 내부의 while 루프를 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top