【发布时间】:2018-12-14 17:02:49
【问题描述】:
我开发了一个应用程序,它将使用 TCP 服务器套接字程序与 plc 交互。
每个循环 plc 都以字符('R')的形式向我的应用程序发送一个信号。
但有时我没有收到任何字符。这意味着事件没有触发。
但是下次当 plc 发送“R”时,我会收到它作为“RR”。
我的代码是`
private void _tcpServerFortest_OnRead(Socket soc)
{
// rec = new byte[1];
byte[] rec = _tcpServerFortest.ReceivedBytes;
string str = System.Text.ASCIIEncoding.ASCII.GetString(rec);`
}
我的启动 TCP 服务器的代码是
_tcpServerFortest = new CServerSocket(2005);
_tcpServerFortest .OnConnect += _tcpServerFortest _OnConnect;
_tcpServerFortest .OnDisconnect += _tcpServerFortest _OnDisconnect;
_tcpServerFortest .OnRead += _tcpServerFortest _OnRead;
_tcpServerFortest .Active();
在我的cServerSocket类中,接收数据的方法如下
private void OnDataReceived(IAsyncResult asyn)
{
SocketPacket socketData = (SocketPacket)asyn.AsyncState;
try
{
int iRx = socketData.m_currentSocket.EndReceive(asyn);
if (iRx < 1)
{
socketData.m_currentSocket.Close();
if (!socketData.m_currentSocket.Connected)
{
if (OnDisconnect != null)
OnDisconnect(socketData.m_currentSocket);
Clients.Remove(socketData.m_currentSocket);
socketData.m_currentSocket = null;
}
}
else
{
mBytesReceived = socketData.dataBuffer;
char[] chars = new char[iRx + 1];
Decoder d = Encoding.UTF8.GetDecoder();
d.GetChars(socketData.dataBuffer, 0, iRx, chars, 0);
mTextReceived = new String(chars);
if (OnRead != null)
OnRead(socketData.m_currentSocket);
WaitForData(socketData.m_currentSocket);
}
}
catch (InvalidOperationException ex)
{
if (socketData.m_currentSocket.Connected)
socketData.m_currentSocket.Close();
if (!socketData.m_currentSocket.Connected)
{
if (OnDisconnect != null)
OnDisconnect(socketData.m_currentSocket);
Clients.Remove(socketData.m_currentSocket);
socketData.m_currentSocket = null;
}
else
if (OnError != null)
OnError(ex.Message, null, 0);
}
catch (SocketException se)
{
if (OnError != null)
OnError(se.Message, socketData.m_currentSocket, se.ErrorCode);
if (!socketData.m_currentSocket.Connected)
{
if (OnDisconnect != null)
OnDisconnect(socketData.m_currentSocket);
Clients.Remove(socketData.m_currentSocket);
socketData.m_currentSocket = null;
}
}
}
谁能帮我解决这个问题?
【问题讨论】:
标签: c#