最近在研究modbus的TCP模式。连接服务器按钮代码如下: private void bt_Connect_Click(object sender, EventArgs e)
{
/**************************************连接服务器*******************************************/
IPAddress serverIP;
IPEndPoint serverFullAddr; serverIP = IPAddress.Parse("127.0.0.1"); serverFullAddr = new IPEndPoint(serverIP,502); socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
socket.Connect(serverFullAddr);
/**************************************多线程接收******************************************/
Thread t = new Thread(new ThreadStart(RecevieMsg));
t.Name = "Recive Name";
t.IsBackground = true;
t.Start();
}
发送数据按钮代码如下: //发送按钮
private void bt_Send_Click(object sender, EventArgs e)
{
byte[] message = new byte[6]; message[0] = 2;
message[1] = 3;
message[2] = (byte)(0 >> 8);
message[3] = (byte)0;
message[4] = (byte)(1 >> 8);
message[5] = (byte)1;
socket.Send(message);
}
多线程接收数据代码如下: private void RecevieMsg()
{
while (true)
{
byte[] recevie = new byte[1024]; socket.Receive(recevie);
MessageBox.Show(recevie[5].ToString());
}
}
现在的问题是->我在界面上点两次发送按钮,才会弹出一次messageBox..或者在发送按钮中写两行 socket.Send(message);不知道这是何道理,有办法解决么?
希望高手指点。
万分感谢!!!!!
{
/**************************************连接服务器*******************************************/
IPAddress serverIP;
IPEndPoint serverFullAddr; serverIP = IPAddress.Parse("127.0.0.1"); serverFullAddr = new IPEndPoint(serverIP,502); socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
socket.Connect(serverFullAddr);
/**************************************多线程接收******************************************/
Thread t = new Thread(new ThreadStart(RecevieMsg));
t.Name = "Recive Name";
t.IsBackground = true;
t.Start();
}
发送数据按钮代码如下: //发送按钮
private void bt_Send_Click(object sender, EventArgs e)
{
byte[] message = new byte[6]; message[0] = 2;
message[1] = 3;
message[2] = (byte)(0 >> 8);
message[3] = (byte)0;
message[4] = (byte)(1 >> 8);
message[5] = (byte)1;
socket.Send(message);
}
多线程接收数据代码如下: private void RecevieMsg()
{
while (true)
{
byte[] recevie = new byte[1024]; socket.Receive(recevie);
MessageBox.Show(recevie[5].ToString());
}
}
现在的问题是->我在界面上点两次发送按钮,才会弹出一次messageBox..或者在发送按钮中写两行 socket.Send(message);不知道这是何道理,有办法解决么?
希望高手指点。
万分感谢!!!!!
这个方法是同步方式,如果没有数据,就停在哪里等待,一直到设定的ReceiveTimeOut值为止,不会跳到下一步语句
线程中少用UI,有可能不会显示你的messagebox