【问题标题】:Sending data using Sockets from a C# application to a Lua application使用套接字从 C# 应用程序向 Lua 应用程序发送数据
【发布时间】:2013-03-29 16:29:16
【问题描述】:

我的 C# 应用程序中的这个函数会将字母 U 发送到另一台 PC 上的 lua 应用程序:

private void drive_Click(object sender, RoutedEventArgs e)
{
    Socket soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    System.Net.IPAddress ipAddress = System.Net.IPAddress.Parse("192.168.1.180");
    IPEndPoint remote = new IPEndPoint(ipAddress, 1337);
    soc.Connect(remote);

    byte[] commands = System.Text.Encoding.ASCII.GetBytes("U");
    soc.Send(commands);
}

这是 lua 中的小脚本,它将接收来自 C# 应用程序的命令并将它们写入串行(它工作正常,我通过使用 netcat 发送字符进行了尝试,一切正常。)

local socket = require("socket")
local server = assert(socket.bind("*", 1337))

wserial=io.open("/dev/ttyATH0","w")

while 1 do
  local client = server:accept()
  client:settimeout(10)

  local line, err = client:receive()

  if not err then client:
    wserial:write(line)
  end

  wserial:flush()
  client:close()
end

我做错了什么?我没有收到任何数据...

谢谢。

【问题讨论】:

    标签: c# wpf sockets lua


    【解决方案1】:

    好的,答案是将我在 C# 中的代码更改为以下内容:

    TcpClient tcp = new TcpClient("192.168.1.4", 1337);
    string cmd = "U\n";
    byte[] buf = System.Text.ASCIIEncoding.ASCII.GetBytes(cmd.Replace("\0xFF", "\0xFF\0xFF"));            
    tcp.GetStream().Write(buf, 0, buf.Length);
    

    小心

    string cmd = "U\n";
    

    您必须添加换行符,否则将不起作用。

    【讨论】:

    • manual中:socket.receive()有一个pattern参数,指定如下:"'*l':从socket中读取一行文本。该行以 LF 字符 (ASCII 10) 结尾,前面可选 CR 字符 (ASCII 13)。不返回 CR 和 LF 字符。这是默认模式;"
    • 强调:“这是默认模式”
    猜你喜欢
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多