【发布时间】:2011-03-16 14:16:21
【问题描述】:
我正在使用 ActionScript 连接到 C# 套接字服务器。 在客户端(ActionScript)中,我使用以下方式发送数据:
var socket:Socket = new Socket("localhost", 8080);
socket.writeUTF("hello");
socket.flush();
在服务器(C# 4.0)中,我使用这个:
server = new TcpListener(IPAddress.Any, 8080);
server.Start();
TcpClient client = server.AcceptTcpClient();
BinaryReader reader = new BinaryReader(client.GetStream(), Encoding.UTF8);
Console.WriteLine(reader.ReadString());
我可以将槽式闪存连接到服务器。但是服务器没有收到来自客户端的消息(“hello”)。服务器只是忽略消息,就像它没有发送一样。但是当我再次执行 reader.ReadString() 时,我会收到消息(因此我必须阅读两次才能获得每个输入)。
我想我知道问题所在 - 这是 Flash 写入字符串的方式: http://livedocs.adobe.com/flex/3/langref/flash/net/Socket.html#writeUTF()
这就是 C# 的读取方式:
http://msdn.microsoft.com/en-us/library/system.io.binaryreader.read7bitencodedint.aspx
关于 C# 如何读取它的其他信息(查看备注):http://msdn.microsoft.com/en-us/library/system.io.binarywriter.write7bitencodedint.aspx
谁能告诉我如何使客户端和服务器都使用二进制数据进行通信?
谢谢,摩西。
【问题讨论】:
-
您是否错过了
writeUTF()描述中的以下内容:“注意:此方法写入的数据不会立即传输;它会排队等待调用flush()方法。” ? -
哦,在我的完整代码中,我使用了 'socket.flush()' 但我只是忘记在这里写了。因此,即使使用冲洗也无法正常工作。
标签: .net flash sockets actionscript c#-4.0