我想编写一个程序,使用来自指定ip和端口号的tcpClient接收一些数据。我是第一次使用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...");
}
}
工作正常但不如我希望的那样好。当我运行我的程序并发送给它为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();
}
}
}
答案 0 :(得分:2)
查看TCPClient对象的这个属性
http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.connected.aspx
你可以这样使用
while(tcpClient.Connected)
{
// do something while conn is open
}
答案 1 :(得分:1)
您的朋友让您使用线程,因此您的主应用程序未被锁定。现在您已经创建了一个新线程,您可以在该线程中使用while循环,就像您之前所做的那样。