C# 从Flex(XMLSocket)连接到.NET(Socket)的数据问题
我正在为我的游戏开发一个聊天/IM系统(用Flex编写),希望通过套接字将它连接到我的服务器(用C#编写) 因此,我已经使用Flex上的XMLSocket和服务器端的Socket成功地将它们连接在一起,客户端获得连接的事件,正确地发送数据,但是当我尝试将数据从服务器发送回客户端时,什么也没有发生(即使BeginSend回调显示整个缓冲区都已发送) 客户:C# 从Flex(XMLSocket)连接到.NET(Socket)的数据问题,c#,apache-flex,sockets,C#,Apache Flex,Sockets,我正在为我的游戏开发一个聊天/IM系统(用Flex编写),希望通过套接字将它连接到我的服务器(用C#编写) 因此,我已经使用Flex上的XMLSocket和服务器端的Socket成功地将它们连接在一起,客户端获得连接的事件,正确地发送数据,但是当我尝试将数据从服务器发送回客户端时,什么也没有发生(即使BeginSend回调显示整个缓冲区都已发送) 客户: private var hostName:String = "localhost"; private var port:uint =
private var hostName:String = "localhost";
private var port:uint = 4444;
private var socket:XMLSocket;
public var app:DotNETServerTest;
public function DotNetSocketExample() {
socket = new XMLSocket();
configureListeners(socket);
socket.connect(hostName, port);
}
public function send(data:Object):void {
socket.send(data);
}
public function disconnect():void {
socket.close();
closeHandler(null);
}
private function configureListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.CLOSE, closeHandler);
dispatcher.addEventListener(Event.CONNECT, connectHandler);
dispatcher.addEventListener(DataEvent.DATA, dataHandler);
}
private function closeHandler(event:Event):void {
trace("closeHandler: " + event);
app.send_btn.enabled = false;
app.disconnect_btn.enabled = false;
}
private function connectHandler(event:Event):void {
trace("connectHandler: " + event);
app.send_btn.enabled = true;
app.disconnect_btn.enabled = true;
}
private function dataHandler(event:DataEvent):void {
trace("dataHandler: " + event);
Alert.show(event.data);
}
服务器(仅特定部分):
//这是回调函数,连接客户端时将调用该函数
客户端连接上的公共静态无效(IAsyncResult asyn)
{
尝试
{
SocketClient NewConnection=newsocketclient(SocketServer.EndAccept(asyn));
//这是我试图发送的测试消息
SendMessageTo(新连接“”);
Clients.Add(NewConnection);
WaitForData(新连接);
LogMessage(NewConnection,“Client{0}connected”,Clients.Count);
BeginAccept(新的AsyncCallback(OnClient连接),null);
}
捕获(ObjectDisposedException)
{
日志消息(“OnClient连接:套接字已关闭”);
}
捕获(SocketException se)
{
控制台写入线(se消息);
}
}
内部静态void SendMessageTo(SocketClient客户端,字符串数据)
{
byte[]byteData=Encoding.ASCII.GetBytes(数据);
SendMessageTo(客户端,字节数据);
}
内部静态void SendMessageTo(SocketClient客户端,字节[]byteData)
{
尝试
{
client.socket.BeginSend(byteData,0,byteData.Length,SocketFlags.None,新异步回调(SendCallback),client);
}
捕获(例外e)
{
LogMessage(客户端,“向客户端发送数据时出错:{0}”,e.Message);
}
}
内部静态void SendCallback(IAsyncResult ar)
{
//从异步状态对象检索套接字。
SocketClient处理程序=(SocketClient)ar.AsyncState;
尝试
{
int bytesSent=handler.socket.EndSend(ar);
}
捕获(例外e)
{
日志消息(处理程序,e.Message);
}
}
请帮忙!
谢谢,Ron发现了问题-我没有在每次发送结束时发送\0 更改为:
byte[] byteData = Encoding.ASCII.GetBytes(Data);
client.socket.BeginSend(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(SendCallback), client);
为此:
byte[] byteData = Encoding.ASCII.GetBytes(Data + "\0");
client.socket.BeginSend(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(SendCallback), client);
byte[] byteData = Encoding.ASCII.GetBytes(Data + "\0");
client.socket.BeginSend(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(SendCallback), client);