【发布时间】:2014-04-13 11:46:19
【问题描述】:
在我的公司,我们有一个自动站,可以跨 LAN 运行 Iperf 和其他软件, 现在我得到了改善沟通的任务。我是 C# 的新手,需要一些帮助。 我们现在拥有的是: 其他消息的简单监听器
public void Connect(int port, string Host)
{
if (!Connected)
{
Connected = true;
SetIP(port, Host);
t1 = new Thread(new ThreadStart(CreateListener));
t1.Name = "Listener Thread";
t1.Priority = ThreadPriority.AboveNormal;
t1.Start();
}
public void Disconnect()
{
if (Connected)
{
t1.Abort();
peerListener.Stop();
Connected = false;
}
}
private void CreateListener()
{
try
{
int iLength = 0;
Socket tc = null;
peerListener = new TcpListener(IPAddress.Any, port);
peerListener.Start();
while (true)
{
if (!peerListener.Pending())
{
//Read data
}
}
}catch { }
}
还有一个信使:
private void CreateClient(object message)
{
try
{
peerClient = new TcpClient();
peerClient.Connect(host, port);
netStream = peerClient.GetStream();
StreamWriter sw = new StreamWriter(netStream);
sw.Write((string)message);
//sw.Write((string)messa
sw.Flush();
netStream.Close();
peerClient.Close();
}
catch
{
}
}
internal void Write(string message)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(CreateClient), message);
}
我们所做的是发送一个简单的文本消息,并通过_TextChanged事件解析屏幕文本和DO SOMETHING
到目前为止一切顺利,我正在寻找一种方法来确认一旦发送消息,我就可以确认对方的应用程序收到了消息。
这一切都适用于TcpListener,所以我很确定有一种方法可以对其进行采样并获得标志或其他东西,这会给我想要的东西
先谢谢了
【问题讨论】:
-
没有办法检查消息是否真的发送,消息只是排队到sendbuffer。因此,在发送后关闭套接字,将处理缓冲区以及可能未发送的消息。您可以在关闭前尝试延迟。这是我不喜欢套接字的地方......或者你应该返回一条消息,该消息已收到。
-
@JeroenvanLangen 这是我现在正在实现的(在每条消息(连接、运行、停止等)之后发送和反馈消息)我可以做什么而不是使用套接字,以及什么是优势?
-
目前,我不知道确认消息的更好选择。
标签: c# p2p tcpclient tcplistener