我是 Websockets 的新手,正在寻找使用 WS 和 c# 控制台应用程序的工作示例。我遇到了这个,但我已经遇到了问题。当服务器向客户端发送消息时,连接似乎已关闭。我不确定,但我认为握手没问题。这是一个代码:
服务器:
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 …Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个音乐播放器应用程序,就像iPod应用程序一样,我想用摇晃手势来播放歌曲.
我正在实施像Apple推荐的运动方法,并且在前台一切正常.
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event;
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event;
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event;
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何从后台调用这些方法.我看过整个互联网,并没有关于这个的线索.
首先要做的事情是:有可能吗?
感谢名单!
iphone objective-c motion-detection gesture-recognition handshake
我正在WebSocketnode.js中构建一个服务器.当客户端已连接时,我想立即向其发送消息.
但是,当我在握手完成后发送它时,Chrome中出现错误:
Status line contains embedded null
Run Code Online (Sandbox Code Playgroud)
当我setTimeout在握手后100毫秒使用a 发送消息时,它可以工作,但是当使用这种技术使用10毫秒时,它再次无效.
看起来握手和消息在一起发送时会被附加,以防它们之间的时间间隔很小(虽然我不确定,因为我不知道如何查看WebSocketChrome中的原始流量 - 如果有人我喜欢也听到了).
我不想让服务器等待100毫秒,因为它对于客户端来说肯定是显而易见的,而且它看起来像一个肮脏的技巧而不是一个很好的解决方案.
如何在握手后立即发送消息?
[这是 Github 上 socket.io 问题 #2717 的副本。那里没有答案,我很想得到一些故障排除提示...]
我有一个测试页面(如下),它创建一个 socket.io 连接回到服务器,然后监听并记录“时间”消息。它适用于 OSX 10.10.5 上最近的 Chrome 和 Safari。我使用 Socket.io 1.5.0 进行所有测试。
在 Firefox 49.0.1 中,每个 POST 请求都会得到一个带有bad handshake method. 没有Socket.io connected...在控制台消息,并且没有time邮件到达(参见图)。关于 POST 的其他有趣信息是:
- Params: EIO:3, t: LUuPeKr, transport:polling
- POST raw data: "1:1"
Run Code Online (Sandbox Code Playgroud)
测试页面连接回 create-react-app 应用程序 (0.6.1),该应用程序将请求代理到我自己在 localhost:3001 上的服务器。如上所述,此页面在 Chrome 和 Safari 中按预期工作。
我可以提供哪些其他信息来调试它?

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>SOCKET.IO TEST PAGE</title>
</head>
<body>
<h1>Socket.io Test Page</h1>
<script src="/socket.io/socket.io.js"></script> …Run Code Online (Sandbox Code Playgroud) 我使用wireshark捕获了在都支持TLSv1.3的客户端和服务器之间建立的TLSv1.3握手。我知道证书是以加密形式发送的,但我找不到任何字段表明我们在这里找到了加密证书。有什么帮助吗?
从我得到对等列表,我得到一个tcp连接到同行,我试图给他们一个握手消息,但他们似乎没有回应.
这是我在代码中的消息:
message = bytes(chr(19))+"BitTorrent protocol00000000"+self.getInfoHash(torrentCont)+self.peer_id
Run Code Online (Sandbox Code Playgroud)
self.getInfoHash(torrentCont)是torrent文件中的原始哈希
这是我发送的实际内容:
BitTorrent protocol00000000ŒïƒœÝtDØ´öÙÄ×àŠD³T4F11T6ZGBQK2Y5LB8I4
Run Code Online (Sandbox Code Playgroud)
关于我做错了什么的任何建议?
我理解在三向握手中,有时接收端会在建立连接(piggybacking)时发送一个SYNACK数据包,但是它什么时候发送一个SYN然后一个ACK数据包?
例如:
->同步
<-SYN_ACK
->确认
相对:
->同步
<-同步
->SYN_ACK
谢谢!
我创建了一个 PHP websocket 服务器并与一个 webbrowser 连接到它。一切正常。现在我想将一些 cookie 信息发送到 websocket 服务器,但 cookie 并从不与标头一起发送。我真的不知道为什么 cookie 不包含在请求标头中。(在 index.php 中使用 php 回显时,cookie 已设置且不为空)
这是请求和响应头
要求
GET ws://127.0.0.1:9000/chat HTTP/1.1
Host: 127.0.0.1:9000
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://localhost
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4
Sec-WebSocket-Key: 2nR9SZYdLOG32fpV6eJ/wA==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Run Code Online (Sandbox Code Playgroud)
回复
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: QecMAdsem/PYww1pYkyjD+79OmM=
Run Code Online (Sandbox Code Playgroud)
握手
// do handyshake: (hybi-10)
$secKey = $headers['Sec-WebSocket-Key'];
$secAccept …Run Code Online (Sandbox Code Playgroud) 如果攻击者在握手之前进行 MIM 攻击,并获取公共证书并充当侦听器。
不要试图充当各方之一,只需阅读所有通信即可获取有用的信息,例如 JWT 令牌以及有关用户在该网站上执行的操作的其他信息。
鉴于攻击者能够在连接安全之前拦截证书,它可以在握手完成后打开所有数据包,我错了吗?
那可能吗?
handshake ×9
websocket ×3
bittorrent ×1
c# ×1
certificate ×1
cookies ×1
https ×1
iphone ×1
networking ×1
node.js ×1
objective-c ×1
php ×1
protocols ×1
python ×1
socket.io ×1
sockets ×1
ssl ×1
tcp ×1
tls1.3 ×1