【发布时间】:2014-10-30 14:39:35
【问题描述】:
我正在编写一个 websockets 客户端。我有两个问题:
当我关闭应用程序的窗口时,服务器出现故障
服务器没有收到消息,但客户端总是收到来自服务器的问候消息。
System.Exception : 你必须在 websocket 之后通过 websocket 发送数据 打开
C# 客户端(Websocket4Net 库)
private static void _clientSocket_Closed(object sender, EventArgs e)
{
if (_clientSocket.State == WebSocket4Net.WebSocketState.Open)
{
_clientSocket.Close("Closed by user");
}
}
public static void WebRequest(string url, dutyObject objToSend)
{
_clientSocket = new WebSocket(url);
_clientSocket.MessageReceived += _clientSocket_MessageReceived;
_clientSocket.DataReceived += _clientSocket_DataReceived;
_clientSocket.Closed += _clientSocket_Closed;
_clientSocket.Error += new EventHandler<SuperSocket.ClientEngine.ErrorEventArgs>(_clientSocket_Error);
_clientSocket.Open();
var jsonMessage = JsonSerializeHelper.Serialize(objToSend);
_clientSocket.Send(jsonMessage);
}
php 上的服务器
class Server extends WebSocketServer
{
protected function serverCreated()
{
}
/**
* This is run when server is receiving data.
*/
protected function process($connected_user, $message)
{
$this->send($connected_user,"[+]".$message); //just echo reply
}
/**
* This is run when socket connection is established. Send a greeting message
*/
protected function connected($connected_user)
{
$welcome_message = 'Welcome to Service. Service works with JSON. Be careful!';
$this->send($connected_user, $welcome_message);
}
protected function closed($connected_user)
{
$this->stdout("User closed connection \n");
}
}
客户端更新。
while (_clientSocket.State != WebSocketState.Open)
{
if (_clientSocket.State == WebSocket4Net.WebSocketState.Open)
{
Console.WriteLine(_clientSocket.State);
_clientSocket.Send(ecn.GetBytes(jsonMessage), 0, ecn.GetBytes(jsonMessage).Length);
}
else
{
Console.WriteLine("E: " + _clientSocket.State);
//_clientSocket.Close();
}
}
它会永久显示“正在连接”。
【问题讨论】:
-
请上主题:(
-
错误提示时间问题,您确定在发送数据之前套接字已连接吗?不好的做法是假设连接已连接,在发送数据之前检查状态。
-
@Wranorn,查看更新的代码。客户端套接字在“正在连接”状态下冻结。
-
你可以从客户端连接任何东西到服务器(即telnet是否连接到服务器?)
-
@Wranorn,Telnet 连接到服务器但不发送消息。我在 js 上有一个小客户端,效果很好。
标签: c# php websocket client-server websocket4net