IP와 포트에서 데이터를 수신 할 스레드
-
05-07-2019 - |
문제
지정된 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 루프를 사용할 수 있습니다.
제휴하지 않습니다 StackOverflow