c# websocket client java websocket server

news/2025/2/26 7:15:36

实现功能:c# websocket 客户端 连接 java websocket 服务端

一,c# websocket 客户端 

nuget websocketsharp-netstandard

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using WebSocketSharp;  //websocketsharp-netstandard

namespace websocketClientTest
{
    public class Program
    {
        static void Main(string[] args)
        {
            string webPath = "ws://192.168.1.100:8080/websocket";
            WebSocket webSocket = new WebSocket(webPath);
            webSocket.Connect();            
            webSocket.OnMessage += (sender, e) =>
            {
                //接收到消息并处理                
                byte[] byteArray = e.RawData;
                string str = System.Text.Encoding.UTF8.GetString(byteArray);
                Console.WriteLine(str);
            };

            string strMsg = "hello"; 
            webSocket.Send(System.Text.Encoding.Default.GetBytes(strMsg));//发送消息的函数
            while (true)
            {
               Thread.Sleep(5000);
            }
        }

        public Program(string url)
        {
            
        }                
    }
}

二,java websocket server

import org.springframework.stereotype.Component;

import java.nio.ByteBuffer;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;

/**
 * @ServerEndpoint
 * 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端,
 * 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端
 */
@ServerEndpoint(value="/websocket")
@Component
public class WebSocketTest {
    
    private static ConcurrentHashMap<String, Session> sessions = new ConcurrentHashMap<>();
    
    @OnOpen
    public void onOpen(Session session){ 
        System.out.println("加入连接");  
        sessions.put(session.getId(), session);
    }

    @OnClose
    public void onClose(){ 
        System.out.println("关闭连接");
        
    }

    @OnError
    public void onError(Session session, Throwable error){  
       System.out.println("发生错误");
       error.printStackTrace(); 
       //TODO
    }

    /**
     * 收到客户端消息后调用的方法
     * @param messages 客户端发送过来的消息
     * @param session 可选的参数
     */
    @OnMessage(maxMessageSize = 5000000)
    public void onMessage(byte[] messages, Session session) {
        try {
            System.out.println("接收到消息:"+new String(messages,"utf-8"));
            //返回信息
            String resultStr="{name:\"张三\",age:18,addr:\"上海浦东\"}";
            //发送字符串信息的 byte数组
            ByteBuffer bf=ByteBuffer.wrap(resultStr.getBytes("utf-8"));
            session.getBasicRemote().sendBinary(bf);
            //发送字符串
            //session.getBasicRemote().sendText("测试"); 
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    


http://www.niftyadmin.cn/n/4411684.html

相关文章

【实现一套爬虫数据抓取平台】[3-3-03] Ubuntu 如何升级 CMake

文章目录0、系列目录1、背景2、操作步骤3、总结0、系列目录 写这套文章的时候&#xff0c;不会完全按照目录的顺序一篇一篇写&#xff0c; 大家可以到目录中直接找到对应的章节进行查看。 点我跳转 1、背景 安装某些 Python 依赖库的时候&#xff0c;需要特定版本的 Cmake&…

网上有关回车和换行的一个有趣说法

"回车"(carriage return)和"换行"(line feed)这两个概念的来历和区别: 在计算机还没有出现之前&#xff0c;有一种叫做电传打字机(Teletype Model 33)的玩意&#xff0c;每秒钟可以打10个字符。但是它有一个问题&#xff0c;就是打完一行换行的时候&#x…

【实现一套爬虫数据抓取平台】[3-3-04] 使用 Docker-Compose 安装 Kafka

文章目录0、系列目录1、代码0、系列目录 写这套文章的时候&#xff0c;不会完全按照目录的顺序一篇一篇写&#xff0c; 大家可以到目录中直接找到对应的章节进行查看。 点我跳转 1、代码 简单粗暴&#xff0c;直接上代码。 version: 2 services:zookeeper:image: wurstmei…

汇编的有趣问题

int main(){ int a1; int b2; int c-1;} 问题是下面哪个关系成立: &a>&b>&c还是&a<&b<&c? 我们知道局部变量是存放在栈中的,a先PUSH,然后是b,最后是c。 而栈指针SP是从高地址→低地址方向移动的,所以&a>&b>…

【解决方法】如何用 SQL 查询特殊字符(换行符、Tab符)

背景 某些情况下&#xff0c;我们的数据库里面可能会保存有特殊字符&#xff0c;最好的方式是在保存之前处理一下&#xff0c;不然后面的业务使用到的时候可能会有各种奇奇怪怪的问题。 但&#xff0c;不可避免的&#xff0c;总有漏网之鱼&#xff0c;我们需要检查一下库里面…

5条DBA最佳实践指导

本文5条基本最佳实践源于我多年使用大大小小的Oracle系统的实际经验总结……就我而言&#xff0c;最佳实践之所以是最佳实践必须满足 1)它能够被证明是有效的&#xff0c;2)它足够灵活&#xff0c;可以适用于多种环境。下面的5条基本最佳实践源于我多年使用大大小小的Oracle系统…

【解决方法】Docker+uWSGI+Flask 报错 ModuleNotFoundError: No module named ‘flask‘

背景 Docker Nginx uWSGI Flask 部署的环境&#xff0c;以前一直都能好好跑&#xff0c;这次把基础镜像的 Python 版本由原来的 3.6 升级到了 3.8&#xff0c;就报了标题的错。 Docker Nginx uWSGI Flask 部署可以参考 这篇文章 问题分析 先看一下 Docker 的启动日志&a…

【解决方法】如何压缩网页字体文件

背景 一个小的 H5 项目&#xff0c;客户要求使用指定的字体&#xff0c;一般来讲如果有特殊字体&#xff0c;前端这边都按照切图来处理了。 但是这个项目中的特殊字体的字符内容是变化的&#xff0c;也就没办法提前切图。 所以只能在网页中使用字体文件&#xff0c;又因为文…