我是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 - 断开服务器消息相关推荐

  1. 服务器 主动 推送 客户端浏览器 消息***

    前言 通常情况下,无论是web浏览器还是移动app,我们与服务器之间的交互都是主动的,客户端向服务器端发出请求,然后服务器端返回数据给客户端,客户端浏览器再将信息呈现,客户端与服务端对应的模式是: 客 ...

  2. java tcp发消息给硬件_java – TCP客户端/服务器通信只发送第一条消息?

    我在java中设置一个简单的TCP客户端服务器交互. 服务器: 服务器是用Java编写的桌面客户端: import java.io.BufferedReader; import java.io.Dat ...

  3. 阿里消息队列mq服务器,阿里的架构之路——漫谈MQ

    引言 接下来的文章是讨论有关企业分布式开发的文章,文章筹划了很长时间,文章的技术并不算新,但是文章中使用到的技术都是经过笔者研究实践后总结的,正所谓站在巨人的肩膀上,笔者并不是巨人,但也希望这篇文章能 ...

  4. 消息测试服务器,测试统一消息服务器功能

    测试统一消息服务器功能 08/07/2014 本文内容 适用于: Exchange Server 2007 SP1, Exchange Server 2007 上一次修改主题: 2007-08-09 ...

  5. 微信小程序消息推送自有服务器无法接收到信息,消息推送服务器配置次数用完的解决方式。

    问题描述:消息推送自有服务器无法接收到信息,消息推送服务器配置次数用完! 解决方向:自有服务器无法接收信息的排错,消息推送配置的次数用完的解决方式. 适合版本:微信所有版本(2020.4.16) 关于 ...

  6. 服务器向客户机发信息,服务器如何主动给客户端发消息

    服务器如何主动给客户端发消息 内容精选 换一换 当出现以下问题时,可以参考本章节排查解决.可以直接访问后端业务,但是无法通过负载均衡访问后端业务.通过私网IP可以访问负载均衡,但是公网IP无法访问负载 ...

  7. 如何订阅MQTT服务器历史消息,MQTT协议之消息订阅

    序 在MQTT协议中,最重要的就是发布/订阅,下面重点分析下消息订阅. SUBSCRIBE 一般来讲,客户端在成功建立TCP连接之后,发送CONNECT消息,在得到服务器端授权允许建立彼此连接的CON ...

  8. swoole服务器主动推消息,实现websocket-主动消息推送laravelswoole

    实现一个可以主动触发消息推送的功能,这个可以实现向模板消息那个,给予所有成员发送自定义消息,而不需要通过客户端发送消息,服务端上message中监听传送的消息进行做相对于的业务逻辑. 主动消息推送实现 ...

  9. 苹果的消息是从服务器接收数据,iOS 消息推送原理及简单实现

    从图中可以很清楚的看出来推送的原理主要分为以下几步: 1.由App向iOS设备发送一个注册通知,用户需要同意系统发送推送. 2.iOS向APNs远程推送服务器发送App的Bundle Id和设备的UD ...

  10. zeromq不需要消息服务器,ZeroMQ发布订阅TCP丢弃消息订阅服务器失败

    我已经按照github页面上的说明在我的Manjaro Linux机器上从源代码构建了ZeroMQ.所有测试都通过了.在 基本上./autogen ./configure ./make ./make ...

最新文章

  1. linux php 指令,在 Linux 命令行中使用和执行 PHP 代码(一)
  2. android控件---自定义带文本的ImageButton
  3. JZOJ 5182. 【NOIP2017提高组模拟6.29】码灵鼠
  4. Mysql+Heartbeat+Drbd生产环境高可用部署若干问题解惑
  5. [2013.8.29]对于多线程编程的几点个人见解
  6. 动态切换view视图viewflipper组件
  7. 接活,你为啥不行,之懒
  8. batchsize和模型精度的影响
  9. 各种数据库默认端口汇集
  10. Android中合多图片和文字合成PDF文件---路很长
  11. 代码抛出异常后进行事务回滚的两种方式(Spring @Transactional注解)
  12. 科技软文营销标题写作的5个常用技巧
  13. 【转】C++ 常用的STL查找函数方法
  14. Android常见的问题
  15. 二维数组 之 蛇形遍历
  16. AI 新技术革命将如何重塑就业和全球化格局?深度解读 UN 报告(上篇)
  17. IntelliJ IDEA 2021.2版文件显示图标有误的解决方法
  18. 【计算机视觉】OpenCV实现单目相机标定
  19. python自己做课程表_Kivy做一个课程表App(上)
  20. Bark – 给自己的 iPhone 发推送提醒,简单开源且免费

热门文章

  1. 施工员简历英语计算机水平,土建施工员电子版英文简历模板
  2. 开放世界游戏中的大地图背后有哪些实现技术
  3. php生成缩略图实例,(实用篇)PHP生成缩略图的方法实例
  4. 虚拟试衣 原理与应用
  5. 单片机怎么实现模块化编程?思维+实例+系统教程(实用程度令人发指)
  6. 数据包络分析CCR、BCC模型
  7. Matlab中散点图绘制详细教程scatter函数(附matlab代码)
  8. centos7下载及安装步骤
  9. Mac下安装Adobe pr
  10. 关于JavaScript闭包理解