发送接收问题!
做了一个与三菱PLC通讯的程序,使用TCP协议,我是用流来发送和接收的。通讯的具体规则如下:当PLC发送一个数据给计算机后,计算机必须发回一个
“响应”(十六进制的E0),然后PLC才接着发送下一个数据;当计算机给PLC发送数据,PLC接收完后会自动给计算机发回一个“响应”(十六进制的
00);我现在是写的程序是同步接收和发送,用了一个线程负责接收,可以顺利接收到从PLC发过来的数据;用一个button_click事件来发送数
据,但却不能实现;请问这是什么原因?一定要用异步发送和接收吗?同步和异步到底有什么区别?private void Form1_Load(object sender, EventArgs e)
{
int port = 8000;
listener = new TcpListener(port);
listener.Start();
threadlisten = new Thread(new ThreadStart(startlisten));
threadlisten.Start();
}
private void startlisten()
{
while (true)
{
client = listener.AcceptTcpClient();
threadreceive = new Thread(new ThreadStart(receive));
threadreceive.Start();
}
}
public void receive()
{
while (true)
{
ns=client .GetStream ();
byte[] rec = new byte[20];
int i = ns.Read(rec, 0, rec.Length);
if (i != 0)
{
if (rec[0] == 0x60)
{
//数据处理过程
}
ns.Write(msg, 0, msg.Length);
}
}
}
private void button2_Click(object sender, EventArgs e)
{
byte[] snd = { 0x60, 0x00, 0x00, 0x01, 0x00,0x0F };
client.streamSend(snd);
ns.Write(snd, 0, snd.Length);
ns.Flush();
}
这是我编的程序,可以正常接收,但按下button2既不能发送连接收也不行了,然后过了一会儿显示出错,强制关闭了连接,麻烦大家看看这个程序到底出了什么问题?应该怎样修改?