精华内容
下载资源
问答
  • websocket发送中文
    千次阅读
    2018-03-27 17:37:32

    websocket项目,在本地运行那是妥妥的没有问题,在当部署到客户的uat环境的时候,就出现了诡异的情况:本人vpn拨号,可以正常的访问,但是客户那边的电脑登陆到系统,只要有消息往前端jsp页面发送数据,后台就报错,错误信息:Broken pipe (Write failed)。

    首先,用浏览器调试一下发现websocket的握手是正常的,然后就是网上各种找答案,发现其实大部分都是不是自己遇到的问题。最后没有办法,抓包分析呗,在抓包的过程中,发现当后端发送数据给前端页面的时候,会收到前端的带有RST+ACK的包(有可能不是前端发出的,可能是中间的某些设备直接返回的),这就有问题了,数据你都没有接收,居然给我发送RST标识的包?想起之前看到的一篇文章:https://www.cnblogs.com/syfwhu/p/5219826.html   里面有一句话:很多现有的HTTP 中间设备可能不理解新的WebSocket 协议,而这可能导致各种问题:盲目的连接升级、意外缓冲WebSocket 帧、不明就里地修改内容、把WebSocket 流量误当作不完整的HTTP 通信,等等。这时WSS就提供了一种不错的解决方案,它建立一条端到端的安全通道,这个端到端的加密隧道对中间设备模糊了数据,因此中间设备就不能再感知到数据内容,也就无法再对请求做特殊处理。再结合实际情况:本人的电脑可以正常访问,但是客户的就不行,唯一不同的就是电脑的环境了,然后就猜想客户那边电脑应该有个什么安全组啥的东东,经过了一系列的防火墙啊之类的设备,最后决定用wss来处理,改成用wss之后,一切正常。

    更多相关内容
  • websocket 发送json

    2021-05-21 11:13:27
    'AddHandler webSocketClient.Error, Sub(s, e) socketError(s, e) AddHandler webSocketClient.Opened, Sub(s, e) socketOpened(s, e) AddHandler webSocketClient.Closed, Sub(s, e) socketClosed(s, e) ...

    Module Module1

    Sub Main()

    Try

    Dim m_IMSCOMAddress As String = "ws://" + "99.99.99.99" + ":9001"

    Dim m_ws = New RemoteCmdHelper(m_IMSCOMAddress)

    m_ws.m_message = "{""message"": ""stats""}"

    m_ws.Open()

    Threading.Thread.Sleep(500)

    m_ws.Close()

    Dim str = m_ws.m_results

    '{"message":"stats","cpu":{"global":3.008392923190502},"time":117.666,"instance_id":"5d515109",

    '"cells":{"1":{"dl_bitrate":0,"ul_bitrate":0,"dl_tx":0,"ul_tx":0,"dl_retx":0,"ul_retx":0,"dl_use_min":0,

    '"dl_use_max":0.05999999865889549,"dl_use_avg":0.0031247502849712459,"ul_use_min":0.03999999910593033,

    '"ul_use_max":0.09999999403953552,"ul_use_avg":0.04600015194588735,

    '"dl_sched_users_min":0,"dl_sched_users_max":0,"dl_sched_users_avg":0,

    '"ul_sched_users_min":0,"ul_sched_users_max":0,"ul_sched_users_avg":0,

    '"ue_count_min":0,"ue_count_max":0,"ue_count_avg":0,"erab_count_min":0,

    '"erab_count_max":0,"erab_count_avg":0,"dl_gbr_use_min":0,"dl_gbr_use_max":0,

    '"dl_gbr_use_avg":0,"ul_gbr_use_min":0,"ul_gbr_use_max":0,"ul_gbr_use_avg":0}},

    '"rf_ports":{"0":{"rxtx_delay":{"min":2.597916666666667,"max":3.8399305555555556,"avg":3.3078703627033845,

    '"sd":0.2691544629708594}}},"counters":{"messages":{},"errors":{}}}

    Return

    Catch ex As Exception

    'WriteLog("CheckeNBStatus:Failed Exception" + ex.Message)

    Return

    End Try

    End Sub

    End Module

    /***************************************************************************************/

    Imports System

    Imports System.Text

    Imports System.Threading

    Imports System.Threading.Tasks

    Imports WebSocket4Net

    Imports SuperSocket

    Imports SuperSocket.ClientEngine

    Imports System.IO

    Public Class RemoteCmdHelper

    Implements IDisposable

    Private ReceiveChunkSize As Integer = 1024

    Private SendChunkSize As Integer = 1024

    Private webSocketClient As WebSocket

    Private uri As Uri

    Private cancellationTokenSource As CancellationTokenSource = New CancellationTokenSource()

    Private cancellationToken As CancellationToken

    Public m_message As String

    Public m_results As String = ""

    Public Sub New(ByVal remoteuri As String)

    Try

    webSocketClient = New WebSocket(remoteuri)

    'AddHandler webSocketClient.Error, Sub(s, e) socketError(s, e)

    AddHandler webSocketClient.Opened, Sub(s, e) socketOpened(s, e)

    AddHandler webSocketClient.Closed, Sub(s, e) socketClosed(s, e)

    AddHandler webSocketClient.MessageReceived, Sub(s, e) socketMessage(s, e)

    AddHandler webSocketClient.DataReceived, Sub(s, e) socketDataReceived(s, e)

    'webSocketClient.AllowUnstrustedCertificate = True

    Catch ex As Exception

    'WriteLog("Fail to initialize the connect for the cmd to " + remoteuri + " Error:" + ex.Message)

    End Try

    End Sub

    Private disposedValue As Boolean ' To detect redundant calls

    Protected Overridable Sub Dispose(disposing As Boolean)

    If Not disposedValue Then

    If disposing Then

    If Not IsNothing(webSocketClient) Then

    webSocketClient.Dispose()

    End If

    End If

    Finalize()

    End If

    disposedValue = True

    End Sub

    ' TODO: override Finalize() only if Dispose(disposing As Boolean) above has code to free unmanaged resources.

    'Protected Overrides Sub Finalize()

    '    ' Do not change this code.  Put cleanup code in Dispose(disposing As Boolean) above.

    '    Dispose(False)

    '    MyBase.Finalize()

    'End Sub

    ' This code added by Visual Basic to correctly implement the disposable pattern.

    Public Sub Dispose() Implements IDisposable.Dispose

    ' Do not change this code.  Put cleanup code in Dispose(disposing As Boolean) above.

    Dispose(True)

    ' TODO: uncomment the following line if Finalize() is overridden above.

    GC.SuppressFinalize(Me)

    End Sub

    Sub socketOpened(s As Object, e As EventArgs)

    'webSocketClient.Send("{'message':'ue_get'}")

    m_results = ""

    webSocketClient.Send(m_message)

    End Sub

    Sub socketClosed(s As Object, e As EventArgs)

    'WriteLog("Closed")

    End Sub

    Sub socketError(s As Object, e As IO.ErrorEventArgs)

    'WriteLog(e.Exception.ToString)

    End Sub

    Sub socketMessage(s As Object, e As WebSocket4Net.MessageReceivedEventArgs)

    m_results = e.Message

    'If m_nBaseParam1 = 724 Then

    '    WriteLog("socketMessage:" + m_results)

    '    WriteLog(e.Message)

    'End If

    End Sub

    Sub socketDataReceived(ss As Object, e As WebSocket4Net.DataReceivedEventArgs)

    Dim s As New System.Text.StringBuilder

    s.Append(System.Text.ASCIIEncoding.ASCII.GetString(e.Data, 0, e.Data.Length()))

    Dim Str = s.ToString()

    m_results = Str

    'If m_nBaseParam1 = 724 Then

    'WriteLog("socketDataReceived:" + m_results)

    'WriteLog(Str)

    'End If

    End Sub

    Public Function Open() As Boolean

    Try

    m_results = ""

    If webSocketClient.State = WebSocketState.None Or webSocketClient.State = WebSocketState.Closed Then

    webSocketClient.Open()

    End If

    Return True

    Catch ex As Exception

    'WriteLog(ex.Message)

    Return False

    End Try

    End Function

    Public Function Close() As Boolean

    Try

    If webSocketClient.State = WebSocketState.Open Then

    webSocketClient.Close()

    End If

    Return True

    Catch ex As Exception

    'WriteLog(ex.Message)

    Return False

    End Try

    End Function

    Public Function Send(ByVal data As String) As Boolean

    Try

    webSocketClient.Send(data)

    Return True

    Catch ex As Exception

    'WriteLog(ex.Message)

    Return False

    End Try

    End Function

    End Class

    展开全文
  • WebSocket是一种允许通过保持服务器端和用户端始终连接来进行双向通信的技术,所以WebSocket既可以发送数据也可以接收数据,本篇文章我们就来看看如何使用WebSocket发送和接收数据。我们先来看一下如何发送文本数据...

    WebSocket是一种允许通过保持服务器端和用户端始终连接来进行双向通信的技术,所以WebSocket既可以发送数据也可以接收数据,本篇文章我们就来看看如何使用WebSocket发送和接收数据。

    9b2bb7288bee97751a58ceed4be0739f.png

    我们先来看一下如何发送文本数据?

    使用免费提供的echo.websocket.org作为样本

    具体示例如下var connection = new WebSocket('wss://echo.websocket.org');

    connection.send('样本数据');

    在此示例中,以看到正在创建WebSocket实例并使用send()方法发送数据。

    但是,通常应该在任意时间传输数据。

    因此,如果要通过单击按钮发送在表单中输入的数据,可以按如下方式编写。btn.addEventListener('click', function(e) {

    var text = document.getElementById('text');

    connection.send(text.value);

    })

    在这个例子中,我们得到输入表单的字符串并将其应用于send()的参数。

    这样,您就可以发送任意文本数据。

    如何接收文本数据?

    这次使用的测试服务器的Echo.websocket.org将按原样返回传输的数据。

    代码如下connection.onmessage = function(e) {

    console.log(e.data);

    };

    我们使用onmessage()事件,该事件用于接收来自四种类型的事件处理的消息。

    虽然这是一个简单的描述,但仅此一项就可以接收从服务器返回的数据。

    顺便说一下,当你一起使用close()方法时,编码如下connection.onmessage = function(e) {

    console.log(e.data);

    connection.close();

    };

    在这种情况下,在收到数据后立即断开通信。

    此时,需注意的是如果close()断开通信,除非再次与WebSocket建立连接,否则无法通信!

    展开全文
  • 握手成功后前端向服务器发送报文信息,信息内容有中文。解析过程中如何解决乱码问题? msg = decode1(self.conn.recv(1024)) #接收报文 #解析报文 def decode(data): if not len(data): return False ...
  • FastAPI WebSocket 分组发送Json数据 用户1和 用户2 可以互相发送私信消息 用户1 2 3之间相当于一个群,可以发送广播消息 效果 代码 FastAPI 服务端代码 #!/usr/bin/env python # -*- coding: utf-8 -*- # @...

    FastAPI WebSocket 分组发送Json数据

    • 用户1和 用户2 可以互相发送私信消息

    • 用户1 2 3之间相当于一个群,可以发送广播消息

    效果

    展示效果

    代码

    FastAPI 服务端代码

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2020/8/19 13:38
    # @Author  : CoderCharm
    # @File    : main.py
    # @Software: PyCharm
    # @Github  : github/CoderCharm
    # @Email   : wg_python@163.com
    # @Desc    :
    """
    
    https://stackoverflow.com/questions/15219858/how-to-store-a-complex-object-in-redis-using-redis-py
    
    obj = ExampleObject()
    pickled_object = pickle.dumps(obj)
    r.set('some_key', pickled_object)
    unpacked_object = pickle.loads(r.get('some_key'))
    obj == unpacked_object
    
    
    
    typing.Dict[key_type, value_type]
    
    """
    
    from typing import List, Dict
    
    from fastapi import FastAPI, WebSocket, WebSocketDisconnect
    
    app = FastAPI()
    
    
    class ConnectionManager:
        def __init__(self):
            # 存放激活的链接
            self.active_connections: List[Dict[str, WebSocket]] = []
    
        async def connect(self, user: str, ws: WebSocket):
            # 链接
            await ws.accept()
            self.active_connections.append({"user": user, "ws": ws})
    
        def disconnect(self,user: str, ws: WebSocket):
            # 关闭时 移除ws对象
            self.active_connections.remove({"user": user, "ws": ws})
    
        @staticmethod
        async def send_personal_message(message: dict, ws: WebSocket):
            # 发送个人消息
            await ws.send_json(message)
    
        async def send_other_message(self, message: dict, user: str):
            # 发送个人消息
            for connection in self.active_connections:
                if connection["user"] == user:
                    await connection['ws'].send_json(message)
    
        async def broadcast(self, data: dict):
            # 广播消息
            for connection in self.active_connections:
                await connection['ws'].send_json(data)
    
    
    manager = ConnectionManager()
    
    
    @app.websocket("/ws/{user}")
    async def websocket_endpoint(ws: WebSocket, user: str):
    
        await manager.connect(user, ws)
    
        await manager.broadcast({"user": user, "message": "进入聊天"})
    
        try:
            while True:
                data = await ws.receive_json()
                print(data, type(data))
    
                send_user = data.get("send_user")
                if send_user:
                    await manager.send_personal_message(data, ws)
                    await manager.send_other_message(data, send_user)
                else:
                    await manager.broadcast({"user": user, "message": data['message']})
    
        except WebSocketDisconnect:
            manager.disconnect(user, ws)
            await manager.broadcast({"user": user, "message": "离开"})
    
    if __name__ == "__main__":
        import uvicorn
        # 官方推荐是用命令后启动 uvicorn main:app --host=127.0.0.1 --port=8010 --reload
        uvicorn.run(app='main:app', host="127.0.0.1", port=8010, reload=True, debug=True)
    
    

    客户端代码

    由于只是demo, 所以代码都是固定的,有三份固定写的身份信息, 到时候客户端会有登录

    用户一

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>聊天1</title>
    </head>
    <body>
    <h1>User1 Chat</h1>
    <form action="" onsubmit="sendMessage(event)">
        <input type="text" id="messageText" autocomplete="off"/>
        <button>Send</button>
    </form>
    
    <form action="" onsubmit="sendOtherMessage(event)">
        <input type="text" id="messageOther" autocomplete="off"/>
        <button>Send Other</button>
    </form>
    
    <ul id='messages'>
    </ul>
    
    <script>
    
        let ws = new WebSocket("ws://127.0.0.1:8010/ws/user1");
    
        ws.onmessage = function(event) {
            let messages = document.getElementById('messages')
            let message = document.createElement('li');
            console.log(event.data, typeof (event.data), 2222)
            let receiveJson = JSON.parse(event.data);
            console.log(receiveJson, typeof (receiveJson), 333);
            let content = document.createTextNode(`${receiveJson.user}-${receiveJson.message}`);
            message.appendChild(content);
            messages.appendChild(message)
        };
        function sendMessage(event) {
            let input = document.getElementById("messageText");
            let message = {message: input.value, user: "user1"};
            let messageJson = JSON.stringify(message);
    
            ws.send(messageJson);
            input.value = '';
            event.preventDefault()
        }
    
        function sendOtherMessage(event) {
            let input = document.getElementById("messageOther");
            let message = {message: input.value, user: "user1", send_user: "user2"};
            let messageJson = JSON.stringify(message);
    
            ws.send(messageJson);
            input.value = '';
            event.preventDefault()
        }
    </script>
    
    </body>
    </html>
    
    

    用户二

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>聊天2</title>
    </head>
    <body>
    <h1>User2 Chat</h1>
    <form action="" onsubmit="sendMessage(event)">
        <input type="text" id="messageText" autocomplete="off"/>
        <button>Send</button>
    </form>
    
    <form action="" onsubmit="sendOtherMessage(event)">
        <input type="text" id="messageOther" autocomplete="off"/>
        <button>Send Other</button>
    </form>
    
    <ul id='messages'>
    </ul>
    
    <script>
    
        let ws = new WebSocket("ws://127.0.0.1:8010/ws/user2");
    
        ws.onmessage = function(event) {
            let messages = document.getElementById('messages')
            let message = document.createElement('li');
            console.log(event.data, typeof (event.data), 2222)
            let receiveJson = JSON.parse(event.data);
            console.log(receiveJson, typeof (receiveJson), 333);
            let content = document.createTextNode(`${receiveJson.user}-${receiveJson.message}`);
            message.appendChild(content);
            messages.appendChild(message)
        };
        function sendMessage(event) {
            let input = document.getElementById("messageText")
            let message = {message: input.value, user: "user2"}
            let messageJson = JSON.stringify(message);
    
            ws.send(messageJson);
            input.value = '';
            event.preventDefault()
        }
    
        function sendOtherMessage(event) {
            let input = document.getElementById("messageOther");
            let message = {message: input.value, user: "user2", send_user: "user1"};
            let messageJson = JSON.stringify(message);
    
            ws.send(messageJson);
            input.value = '';
            event.preventDefault()
        }
    </script>
    
    </body>
    </html>
    
    

    用户三

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>聊天3</title>
    </head>
    <body>
    <h1>User3 Chat</h1>
    <form action="" onsubmit="sendMessage(event)">
        <input type="text" id="messageText" autocomplete="off"/>
        <button>Send</button>
    </form>
    <ul id='messages'>
    </ul>
    
    <script>
        let ws = new WebSocket("ws://127.0.0.1:8010/ws/user3");
    
        ws.onmessage = function(event) {
            let messages = document.getElementById('messages')
            let message = document.createElement('li');
            console.log(event.data, typeof (event.data), 2222)
            let receiveJson = JSON.parse(event.data);
            console.log(receiveJson, typeof (receiveJson), 333);
            let content = document.createTextNode(`${receiveJson.user}-${receiveJson.message}`);
            message.appendChild(content);
            messages.appendChild(message)
        };
    
        function sendMessage(event) {
            let input = document.getElementById("messageText")
            let message = {message: input.value, user: "user3"}
            let messageJson = JSON.stringify(message);
    
            ws.send(messageJson);
            input.value = '';
            event.preventDefault()
        }
    </script>
    
    </body>
    </html>
    
    

    总结

    websocket 的基本使用原理就是这样了, 全双工的传输协议真的很方便。

    展开全文
  • webSocket发送消息怎么确定用户收到消息了呢 [问题点数:40分]   不显示删除回复 显示所有回复  显示星级回复 显示得分回复  只显示楼主 收藏 sinat_24367905 sinat_...
  • springboot+websocket整合 maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>...
  • js操作就这样ws = new WebSocket($("#uri").val());//连接成功建立后响应ws.onopen = function() {}//收到服务器消息后响应ws.onmessage = function(e) {}//连接关闭后响应ws.onclose = function() {ws = null;}有...
  • WebSocket控制台中文乱码(idea)

    千次阅读 2019-10-17 09:33:54
    最近需要做WebSocket 于是找了个demo https://blog.csdn.net/ZwRiven/article/details/78780709 用eclipse运行没有任何问题 但是用idea运行时出现控制台中文乱码问题 解决:在VM Options项添加-Dfile.encoding=gbk ...
  • 网络协议之:WebSocket的消息格式

    万次阅读 2021-09-24 10:23:35
    文章目录简介WebSocket的握手流程webSocket的消息格式Extensions和Subprotocols总结 简介 我们知道WebSocket是建立在TCP协议基础上的一种网络协议,用来进行客户端和服务器端的实时通信。非常的好用。最简单的使用...
  • 我们都知道, Websocket 是一个双向的通讯方式,一般情况下,我们都是根据 Client 的情况返回信息,但是在一个更加健壮的系统,我们可能需要主动的向客户端发送消息。我试图在中文网络去搜索,查找相关信息,无果。...
  • 项目基于WebSocket实现了一个功能,其中要接受一个字符串来处理业务,但是发现该字符串经过base64解码之后存在乱码情况。一下是排查情况。 乱码: {"message":"鐧诲綍鎴愬姛"} 正常: {"message":"登录成功"} ...
  • WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接...
  • 小程序WebSocket 常见问题:(本文已解决的) 1.自动断开链接,重连但是只能存在两个WebSocket 的问题。 ---1兼容情况:1.1 正常聊天过一段时间 WebSocket 自动断开后重新链接,并且保存之前的聊天记录 ---1兼容...
  • WebSocket协议中文版(rfc6455)

    千次阅读 2022-01-02 21:50:21
    Websocket协议能在受控的环境内实现浏览器与服务器之间的双向通讯(浏览器中的应用可能是不可靠的,但是仍然可以与服务器建立websocket连接),使得浏览器应用与服务器进行双向通讯时不必同时打开多个HTTP连接(使用...
  • 然后在测试过程中发现了,客户端上报中文的时候,会显示乱码, 但是服务器下发的时候反倒不会,真是让头疼的bug,不管怎么样,问题出来了,总是要解决的 二.解决方式(其实这里也有点取巧了) 一般客户端上报填写的内容用的...
  • WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。 它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的...
  • JMeter Websocket 二进制Binary压力测试或接口测试 背景 最近在做游戏项目,做好java服务端,需要本地调试Websock服务,并且是二进制binary形式传输...为了解决websocket的二进制传输,并实现websocket通信
  • WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 ...
  • 注意:发送websocket连接,url中不允许有中文字符,中文字符要进行转码encodeURIComponent() var url = 'ws://100.100.10.10/';//服务器地址 let sock = null; let socketOpen = false; function connect(user, func...
  • python websocket实时消息推送

    万次阅读 2019-03-13 15:00:18
    python websocket实时消息推送 本人写的渣,大神勿喷。 服务端代码 # -*- coding: utf-8 -*- # @Time : 2019/3/12 10:11 # @Author : 甄超锋 # @Email : 4535@sohu.com # @File : severs.py # @Software: ...
  • 手把手教你用JAVA调用Websocket实现“声音转换”功能(变声) 前言 什么是声音转换? 基于深度学习和迁移学习技术,精准将...支持的语言:中文普通话 音频有效时长:不超过180分钟 确认无误后,直接执行 2.2获取权限+2
  • WebSocketServer.zip

    2019-12-17 21:25:28
    WebSocketServer,可以支持发送中文,发送图片,但是一直发送图片会乱码,抛砖引玉把,希望高手能把问题处理了,大家也可以试试喔,欢迎交流分享。
  • 易语言websocket服务器源码系统结构:握手包处理,生成握手参数列,创建返回握手包,返回数据包处理,接收数据包解码,高级截取文本,取sha1,切片,ord,字节集到十六进制,十六进制到字节集,取十进制,取数值,utf8到gbk,gbk到...
  • ​既然aiohttp也能实现Websocket,那就写个客户端/服务器应用直接测试一下吧
  • html5开发之websocket乱码

    千次阅读 2013-12-30 20:43:40
    今天通过myeclipse写了一个websockt程序,但是html5界面始终出现乱发,编码方式明明是utf-8啊.研究了大半天才找到原因。 因为在myeclipse新建的是html文件,如果新建jsp文件,然后将该jsp文件再重写为html5文件,就...
  • 下面代码是使用python实现websocket后端服务;用于与前端网页进行通信 最后可以通过调取send_data方法,发送信息;get_data对发送过来的信息进行解析处理注:如果代码有不理解的可以关注公众号: 测试开发分享 来...
  • C/C++ 实现的websocket客户端和服务器

    千次阅读 2022-03-16 16:06:39
    领导安排实现一个websocket客户端做测试用,因为工位电脑上的环境只有vs2019和boost1.78.0,所以只能基于boost.beast开发。 擅长Qt并且有Qt开发环境的用QWebsocket更方便。 官方的example中仅仅输出到控制台,而且...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,288
精华内容 3,315
关键字:

websocket发送中文