使用C#连接到websocket(我可以使用JavaScript连接,但C#给出状态代码200错误)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用C#连接到websocket(我可以使用JavaScript连接,但C#给出状态代码200错误),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3398字,纯文字阅读大概需要5分钟。
内容图文
![使用C#连接到websocket(我可以使用JavaScript连接,但C#给出状态代码200错误)](/upload/InfoBanner/zyjiaocheng/702/68f0f6009e074f3b9090528efca281c0.jpg)
我是websocket领域的新手.
我可以使用以下代码使用JavaScript连接到websocket服务器:
var webSocket = new WebSocket(url);
但对于我的应用程序,我需要使用c#连接到同一台服务器.我使用的代码是:
ClientWebSocket webSocket = null;
webSocket = new ClientWebSocket();
await webSocket.ConnectAsync(new Uri(url), CancellationToken.None);
代码的第3行导致错误:
“Server returned status code 200 when status code 101 was expected”
经过一点点的调查,我意识到服务器无法在连接过程中将http协议切换到websocket协议.
我在C#代码中做了什么愚蠢的事情,或者服务器出了问题.我没有任何访问服务器的权限,因为我使用的网址是第三方网址.
你能否就这个问题给我任何建议?
解决方法:
使用WebSocketSharp library并轻松连接:
WebSocket客户端
using System;
using WebSocketSharp;
namespace Example
{
public class Program
{
public static void Main (string[] args)
{
using (var ws = new WebSocket ("ws://dragonsnest.far/Laputa")) {
ws.OnMessage += (sender, e) =>
Console.WriteLine ("Laputa says: " + e.Data);
ws.Connect ();
ws.Send ("BALUS");
Console.ReadKey (true);
}
}
}
}
第1步
必需命名空间
using WebSocketSharp;
WebSocket类存在于WebSocketSharp命名空间中.
第2步
使用要连接的WebSocket URL创建WebSocket类的新实例.
using (var ws = new WebSocket ("ws://example.com")) {
...
}
WebSocket类继承System.IDisposable接口,因此您可以使用using语句.当控件离开使用块时,WebSocket连接将以关闭状态1001(离开)关闭.
第3步
设置WebSocket事件.
WebSocket.OnOpen事件
建立WebSocket连接时发生WebSocket.OnOpen事件.
ws.OnOpen += (sender, e) => {
...
};
e已作为System.EventArgs.Empty传递,因此您不需要使用它.
WebSocket.OnMessage事件
WebSocket接收消息时发生WebSocket.OnMessage事件.
ws.OnMessage += (sender, e) => {
...
};
e已作为WebSocketSharp.MessageEventArgs传递.
e.Type属性返回表示消息类型的WebSocketSharp.Opcode.Text或WebSocketSharp.Opcode.Binary.因此,通过检查,您可以确定应该使用哪个项目.
如果它返回Opcode.Text,您应该使用返回字符串的e.Data属性(表示Text消息).
或者,如果它返回Opcode.Binary,则应使用返回byte [](表示二进制消息)的e.RawData属性.
if (e.Type == Opcode.Text) {
// Do something with e.Data.
...
return;
}
if (e.Type == Opcode.Binary) {
// Do something with e.RawData.
...
return;
}
WebSocket.OnError事件
WebSocket收到错误时发生WebSocket.OnError事件.
ws.OnError += (sender, e) => {
...
};
e已作为WebSocketSharp.ErrorEventArgs传递.
e.Message属性返回表示错误消息的字符串.
如果错误是由异常引起的,则e.Exception属性返回导致错误的System.Exception实例.
WebSocket.OnClose事件
WebSocket连接关闭时发生WebSocket.OnClose事件.
ws.OnClose += (sender, e) => {
...
};
e已作为WebSocketSharp.CloseEventArgs传递.
e.Code属性返回一个ushort,表示状态代码,表示关闭的原因,e.Reason属性返回一个字符串,表示关闭的原因.
第四步
连接到WebSocket服务器.
ws.Connect ();
如果要以异步方式连接到服务器,则应使用WebSocket.ConnectAsync()方法.
第5步
将数据发送到WebSocket服务器.
ws.Send (data);
WebSocket.Send方法已重载.
您可以使用WebSocket.Send(字符串),WebSocket.Send(byte [])或WebSocket.Send(System.IO.FileInfo)方法来发送数据.
如果要异步发送数据,则应使用WebSocket.SendAsync方法.
ws.SendAsync (data, completed);
此外,如果您希望在发送完成后执行某些操作,则应将已完成设置为任何操作< bool>代表.
第6步
关闭WebSocket连接.
ws.Close (code, reason);
如果要显式关闭连接,则应使用WebSocket.Close方法.
WebSocket.Close方法已重载.
您可以使用WebSocket.Close(),WebSocket.Close(ushort),WebSocket.Close(WebSocketSharp.CloseStatusCode),WebSocket.Close(ushort,string)或WebSocket.Close(WebSocketSharp.CloseStatusCode,string)方法来关闭连接.
如果要异步关闭连接,则应使用WebSocket.CloseAsync方法.
内容总结
以上是互联网集市为您收集整理的使用C#连接到websocket(我可以使用JavaScript连接,但C#给出状态代码200错误)全部内容,希望文章能够帮你解决使用C#连接到websocket(我可以使用JavaScript连接,但C#给出状态代码200错误)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。