所以我已经搜索了大约2周的时间,我找不到任何合法的答案。
我有两个项目,一个是服务器,另一个是客户端。
我只设法创建一个客户端控制台应用程序,它只将ONCE数据发送到服务器,然后退出。没别了。
那么如何让客户端通过网络将文本框中的字符串发送到服务器,并且服务器CONSTANTLY侦听。总是倾听。不只是监听一次并完成程序,而是等待连接,当建立连接时,服务器接受客户端的字符串,写入字符串或写入文本框,然后立即返回监听连接
我使用的是Windows窗体应用程序,所以我不想要一个控制台应用程序示例。
您可以使用TcpClient和TcpListener ...
答案 0 :(得分:2)
我这样做:
void Loop()
{
TcpListener l = new TcpListener(IPAddress.Any, Port);
WaitHandle[] h = new WaitHandle[2];
h[0] = StopEvent;
WriteInfo("Listening on port {0}", Port);
l.Start();
while (true)
{
var r = l.BeginAcceptTcpClient(null, null);
h[1] = r.AsyncWaitHandle;
// Wait for next client to connect or StopEvent
int w = WaitHandle.WaitAny(h);
if (w == 0) // StopEvent was set (from outside), terminate loop
break;
if (w == 1)
{
TcpClient c = l.EndAcceptTcpClient(r);
c.ReceiveTimeout = 90000;
c.SendTimeout = 90000;
// client is connected, spawn thread for it and continue to wait for others
var t = new Thread(ServeClient);
t.IsBackground = true;
t.Start(c);
}
}
l.Stop();
WriteInfo("Listener stopped");
}
其中Loop
就是在这样的地方开始的:
StopEvent = new ManualResetEvent(false);
LoopThread = new Thread(Loop);
LoopThread.Start();
StopEvent
用于终止侦听循环。 ServeClient
用作名称表示已连接的客户端,如下所示:
void ServeClient(object State)
{
TcpClient c = (TcpClient)State;
NetworkStream s = c.GetStream();
try
{
// Communicate with your client
}
finally
{
s.Close();
c.Close();
}
}
这适用于任何.NET应用程序(Windows服务,控制台,WPF或WinForms)