本帖最后由 jjcl521 于 2010-06-08 13:20:05 编辑

解决方案 »

  1.   

    这个是Delphi的代码 可以实现功能clientsocket1.Active := false;
      clientsocket1.Host := sIP;
      clientsocket1.Port := iPort;
      bop := 10;
      try //当地址或端口不存在时 引发异常,不做处理 继续执行
        if not clientsocket1.Active then clientsocket1.Active := true;
      except
        //raise Exception.Create('目标地址或端口不可用');
      end;
      clientsocket1.Socket.SendText(s);
      sleep(500);  setsockopt(clientsocket1.Socket.SocketHandle, SOL_SOCKET, SO_RCVTIMEO, @bop, sizeof(bop));
      s2 := clientsocket1.Socket.ReceiveText;
      rev := BcdTOstr(s2);
      

  2.   

    你发了个“命令”过去,可我不相信对方接受的命令字是“命令”DELPHI的s的值是什么?
      

  3.   


    所谓的 “命令”也就是一堆字符串我刚从google一下说是串口 socket 
      

  4.   

    我知道所谓的命令是字符串!可你的代码dataSend = Encoding.ASCII.GetBytes("命令");ClientSocket.Send(dataSend, 0, SocketFlags.None);你自己看你发的什么命令过去?难道不是“命令”这个字符串吗,怎么可能会有这样的命令呢?
      

  5.   


    恩,你说的对 可能是我的命令不正确 命令是经过 stirng to bcd ,再经过 crc 校验以后的
      

  6.   

    RecevieCallBack
    你的这个函数干吗用了?ClientSocket.BeginReceive(dataRev, 0, dataRev.Length, SocketFlags.None, new AsyncCallback(RecevieCallBack), ClientSocket);BeginReceive 这个是阻塞的, 程序会一直卡在这里等待接收数据,
    哪里调用了RecevieCallBack?
      

  7.   


    BeginReceive 这个不阻塞哈
      

  8.   

    我也是做工控的
    你最好把DEPHI发的数据和C#发的数据通过工具对比一下
    有可能是C#发过去的数据设备不认识
      

  9.   

    看看这个是怎么写的:一个我经常参考的异步socket通信:
      

  10.   


    失误 看走眼了
    以为在C++里lz的代码看起来没有什么错误,查看一下发送的协议包是否正确
      

  11.   

    用抓包工具 试试
    看你发的包和demo发的包是否一致就知道了