2013-04-07 61 views
1

此功能在我的C#應用​​程序發送的數據將發送字母U到另一臺PC上LUA應用程序:使用套接字從C#應用程序的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 

我在做什麼錯?我沒有收到任何數據...

謝謝。

回答

3

好了,答案是我在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"; 

您必須添加新的行字符,否則將無法正常工作。

+1

這是[手冊](http://w3.impa.br/~diego/software/luasocket/tcp.html#receive):'socket.receive()'有'pattern'參數,指定因此:_「'* l':從套接字讀取一行文本,該行由一個LF字符(ASCII 10)結束,可選地以一個CR字符(ASCII 13)作爲前綴,CR和LF字符不是這是默認模式;「_ – CodeCaster 2013-04-08 14:45:09

+0

強調:*」這是默認模式「* – Textmode 2013-08-27 23:15:30