服务器断开消息,Websockets - 断开服务器消息
我是Websockets的新手,正在寻找使用WS和c#控制台应用程序的工作示例。 我跑进this one,但我已经有问题了。当服务器向客户端发送消息时,似乎连接关闭。我不确定,但我认为握手是好的。下面是一个代码:Websockets - 断开服务器消息
服务器:
using System;
using System.Net.Sockets;
using System.Net;
using System.Security.Cryptography;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
static private string guid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
static void Main(string[] args)
{
serverSocket.Bind(new IPEndPoint(IPAddress.Any, 8080));
serverSocket.Listen(128);
serverSocket.BeginAccept(null, 0, OnAccept, null);
Console.Read();
}
private static void OnAccept(IAsyncResult result)
{
byte[] buffer = new byte[1024];
try
{
Socket client = null;
string headerResponse = "";
if (serverSocket != null && serverSocket.IsBound)
{
client = serverSocket.EndAccept(result);
var i = client.Receive(buffer);
headerResponse = (System.Text.Encoding.UTF8.GetString(buffer)).Substring(0, i);
// write received data to the console
Console.WriteLine(headerResponse);
Console.WriteLine("=====================");
}
if (client != null)
{
/* Handshaking and managing ClientSocket */
var key = headerResponse.Replace("ey:", "`")
.Split('`')[1] // dGhlIHNhbXBsZSBub25jZQ== \r\n .......
.Replace("\r", "").Split('\n')[0] // dGhlIHNhbXBsZSBub25jZQ==
.Trim();
// key should now equal dGhlIHNhbXBsZSBub25jZQ==
var test1 = AcceptKey(ref key);
var newLine = "\r\n";
var response = "HTTP/1.1 101 Switching Protocols" + newLine
+ "Upgrade: websocket" + newLine
+ "Connection: Upgrade" + newLine
+ "Sec-WebSocket-Accept: " + test1 + newLine + newLine
//+ "Sec-WebSocket-Protocol: chat, superchat" + newLine
//+ "Sec-WebSocket-Version: 13" + newLine
;
// which one should I use? none of them fires the onopen method
client.Send(System.Text.Encoding.UTF8.GetBytes(response));
var i = client.Receive(buffer); // wait for client to send a message
// once the message is received decode it in different formats
Console.WriteLine(Convert.ToBase64String(buffer).Substring(0, i));
Console.WriteLine("=====================");
Console.WriteLine("\n\nPress enter to send data to client");
Console.Read();
var subA = SubArray(buffer, 0, i);
client.Send(subA);
Console.Read();
Thread.Sleep(10000);//wait for message to be send
}
}
catch (SocketException exception)
{
throw exception;
}
finally
{
if (serverSocket != null && serverSocket.IsBound)
{
serverSocket.BeginAccept(null, 0, OnAccept, null);
}
}
}
public static T[] SubArray(T[] data, int index, int length)
{
T[] result = new T[length];
Array.Copy(data, index, result, 0, length);
return result;
}
private static string AcceptKey(ref string key)
{
string longKey = key + guid;
byte[] hashBytes = ComputeHash(longKey);
return Convert.ToBase64String(hashBytes);
}
static SHA1 sha1 = SHA1CryptoServiceProvider.Create();
private static byte[] ComputeHash(string str)
{
return sha1.ComputeHash(System.Text.Encoding.ASCII.GetBytes(str));
}
}
}
克伦特:
/p>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
function connect() {
var ws = new WebSocket("ws://localhost:8080/service");
ws.onopen = function() {
alert("About to send data");
ws.send("Hello World"); // I WANT TO SEND THIS MESSAGE TO THE SERVER!!!!!!!!
alert("Message sent!");
};
ws.onmessage = function (evt) {
alert("About to receive data");
var received_msg = evt.data;
alert("Message received = "+received_msg);
};
ws.onclose = function() {
// websocket is closed.
alert("Connection is closed...");
};
};
Click here to start
下面是来自客户机的连接请求和消息:
任何帮助将不胜感激。
服务器断开消息,Websockets - 断开服务器消息相关推荐
- 服务器 主动 推送 客户端浏览器 消息***
前言 通常情况下,无论是web浏览器还是移动app,我们与服务器之间的交互都是主动的,客户端向服务器端发出请求,然后服务器端返回数据给客户端,客户端浏览器再将信息呈现,客户端与服务端对应的模式是: 客 ...
- java tcp发消息给硬件_java – TCP客户端/服务器通信只发送第一条消息?
我在java中设置一个简单的TCP客户端服务器交互. 服务器: 服务器是用Java编写的桌面客户端: import java.io.BufferedReader; import java.io.Dat ...
- 阿里消息队列mq服务器,阿里的架构之路——漫谈MQ
引言 接下来的文章是讨论有关企业分布式开发的文章,文章筹划了很长时间,文章的技术并不算新,但是文章中使用到的技术都是经过笔者研究实践后总结的,正所谓站在巨人的肩膀上,笔者并不是巨人,但也希望这篇文章能 ...
- 消息测试服务器,测试统一消息服务器功能
测试统一消息服务器功能 08/07/2014 本文内容 适用于: Exchange Server 2007 SP1, Exchange Server 2007 上一次修改主题: 2007-08-09 ...
- 微信小程序消息推送自有服务器无法接收到信息,消息推送服务器配置次数用完的解决方式。
问题描述:消息推送自有服务器无法接收到信息,消息推送服务器配置次数用完! 解决方向:自有服务器无法接收信息的排错,消息推送配置的次数用完的解决方式. 适合版本:微信所有版本(2020.4.16) 关于 ...
- 服务器向客户机发信息,服务器如何主动给客户端发消息
服务器如何主动给客户端发消息 内容精选 换一换 当出现以下问题时,可以参考本章节排查解决.可以直接访问后端业务,但是无法通过负载均衡访问后端业务.通过私网IP可以访问负载均衡,但是公网IP无法访问负载 ...
- 如何订阅MQTT服务器历史消息,MQTT协议之消息订阅
序 在MQTT协议中,最重要的就是发布/订阅,下面重点分析下消息订阅. SUBSCRIBE 一般来讲,客户端在成功建立TCP连接之后,发送CONNECT消息,在得到服务器端授权允许建立彼此连接的CON ...
- swoole服务器主动推消息,实现websocket-主动消息推送laravelswoole
实现一个可以主动触发消息推送的功能,这个可以实现向模板消息那个,给予所有成员发送自定义消息,而不需要通过客户端发送消息,服务端上message中监听传送的消息进行做相对于的业务逻辑. 主动消息推送实现 ...
- 苹果的消息是从服务器接收数据,iOS 消息推送原理及简单实现
从图中可以很清楚的看出来推送的原理主要分为以下几步: 1.由App向iOS设备发送一个注册通知,用户需要同意系统发送推送. 2.iOS向APNs远程推送服务器发送App的Bundle Id和设备的UD ...
- zeromq不需要消息服务器,ZeroMQ发布订阅TCP丢弃消息订阅服务器失败
我已经按照github页面上的说明在我的Manjaro Linux机器上从源代码构建了ZeroMQ.所有测试都通过了.在 基本上./autogen ./configure ./make ./make ...
最新文章
- linux php 指令,在 Linux 命令行中使用和执行 PHP 代码(一)
- android控件---自定义带文本的ImageButton
- JZOJ 5182. 【NOIP2017提高组模拟6.29】码灵鼠
- Mysql+Heartbeat+Drbd生产环境高可用部署若干问题解惑
- [2013.8.29]对于多线程编程的几点个人见解
- 动态切换view视图viewflipper组件
- 接活,你为啥不行,之懒
- batchsize和模型精度的影响
- 各种数据库默认端口汇集
- Android中合多图片和文字合成PDF文件---路很长
- 代码抛出异常后进行事务回滚的两种方式(Spring @Transactional注解)
- 科技软文营销标题写作的5个常用技巧
- 【转】C++ 常用的STL查找函数方法
- Android常见的问题
- 二维数组 之 蛇形遍历
- AI 新技术革命将如何重塑就业和全球化格局?深度解读 UN 报告(上篇)
- IntelliJ IDEA 2021.2版文件显示图标有误的解决方法
- 【计算机视觉】OpenCV实现单目相机标定
- python自己做课程表_Kivy做一个课程表App(上)
- Bark – 给自己的 iPhone 发推送提醒,简单开源且免费