websocket实现go(server)与c#(client)通讯

这篇具有很好参考价值的文章主要介绍了websocket实现go(server)与c#(client)通讯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

go 服务端

使用到github.com/gorilla/websocket

package main

import (
	"fmt"
	"github.com/gorilla/websocket"
	"log"
	"net/http"
)

func main() {
	var upgrader = websocket.Upgrader{
		ReadBufferSize:  1024,
		WriteBufferSize: 1024,
		CheckOrigin: func(r *http.Request) bool {
			return true //允许跨域
		},
	}
	http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { //将所有的请求转换为websocket
		upgrader.CheckOrigin = func(r *http.Request) bool {
			return true
		}
		conn, err := upgrader.Upgrade(writer, request, nil)
		if err != nil {
			log.Fatal(err)
		}
		for {
			t, msg, err := conn.ReadMessage()
			if err != nil {
				fmt.Printf("read error:%v\n", err)
				break
			}
			fmt.Printf("[ws]recv count:%d recv:%s,msg type:%d\n", len(msg), string(msg), t)
		}
	})

	err := http.ListenAndServe("127.0.0.1:8081", nil)
	if err != nil {
		log.Fatal(err)
	}
}

C#客户端

C#操作websocket当客户端使用时使用System.Net.Websockets这个命名空间下的ClientWebSocket
winform的设计界面如下:

websocket实现go(server)与c#(client)通讯,websocket,golang,c#
代码如下:

public partial class Form1 : Form
    {
        CancellationTokenSource tokenSource = new CancellationTokenSource();
        System.Net.WebSockets.ClientWebSocket client = new System.Net.WebSockets.ClientWebSocket();
        public Form1()
        {
            InitializeComponent();
            
        }

        private async void button1_Click(object sender, EventArgs e)
        {
            try
            {
                var content=this.rtbContent.Text;
                if (string.IsNullOrEmpty(content))
                {
                    MessageBox.Show("请输入内容来发送");
                    return;
                }
                if (client.State != System.Net.WebSockets.WebSocketState.Open)
                {
                    tokenSource = new CancellationTokenSource();
                    client = new System.Net.WebSockets.ClientWebSocket();
                    //client.Options.KeepAliveInterval = TimeSpan.FromSeconds(1);
                    await client.ConnectAsync(new Uri("ws://127.0.0.1:8081"), tokenSource.Token);
                    var bytes = new byte[10240];
                    var array = new ArraySegment<byte>(bytes);
                    Task.Factory.StartNew(async () =>
                    {
                        while (true)
                        {
                            try
                            {
                                var msg = await client.ReceiveAsync(array, tokenSource.Token);
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show(ex.Message);
                                tokenSource.Cancel();
                                return;
                            }
                        }
                    });
                }
                var buffer = Encoding.UTF8.GetBytes(content);
                await client.SendAsync(new ArraySegment<byte>(buffer), System.Net.WebSockets.WebSocketMessageType.Text, true, tokenSource.Token);
                MessageBox.Show($"已发送{buffer.Length}个字节");
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.ToString());
            }
        }
    }

注意:无论是客户端断开还是服务端断开,如果正在读取消息,则会触发错误。利用此机制可以很方便的处理重连问题。

websocket实现go(server)与c#(client)通讯,websocket,golang,c#文章来源地址https://www.toymoban.com/news/detail-740139.html

到了这里,关于websocket实现go(server)与c#(client)通讯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • go内置库函数实现client与server数据的发送接收

    功能:客户端持续写入数据,直到输入exit退出,服务端读取数据并打印 注意:server和client目录在同一层级 server/main client/main go开启协程,数据写入结束向管道输入信号,主线程获取信号,退出。否则主线程运行结束会直接退出

    2024年02月19日
    浏览(38)
  • C# 实现 Websocket通讯聊天 (管用、超好使,点个赞)

    WebSocket出现之前,Web端为了实现即时通讯,所用的技术都是Ajax轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏览器需要不断的向服

    2024年02月16日
    浏览(35)
  • python socket编程7 - 使用PyQt6 开发UI界面新增实现UDP server和client单机通讯的例子

    在第五篇中,简单实现了命令行下的 TCP/UDP server和client的单机通讯。 在第六篇中,实现了PyQt6开发界面,TCP协议实现的单机server和client的通讯功能。 这一篇,在第六篇的基础上,增加了UDP server和client的单机通讯功能。 1、UDP Server 界面实现服务配置和数据提供 2、UDP Server封装

    2024年02月19日
    浏览(50)
  • 公网WebSocket Client远程连接本地WebSocket Server【内网穿透】

    目录 1. Java 服务端demo环境 2. 在pom文件引入第三包封装的netty框架maven坐标 3. 创建服务端,以接口模式调用,方便外部调用 4. 启动服务,出现以下信息表示启动成功,暴露端口默认9999 5. 创建隧道映射内网端口 6. 创建隧道映射本地端口 7. 测试公网远程连接 jdk1.8 框架:springboot+maven 工

    2023年04月11日
    浏览(38)
  • websocket实现通讯——Java

    参考博客0 1)通知功能: 2)数据收集: 3)加密 认证: 4)反向控制钩子: 1、websocket则允许我们在一条ws连接上同时并发多个请求,即在A请求发出后A响应还未到达,就可以继续发出B请求。由于TCP的慢启动特性(新连接速度上来是需要时间的),以及连接本身的握手损耗,

    2024年02月15日
    浏览(48)
  • Netty 教程 – 实现WebSocket通讯

    WebSocket 协议是基于 TCP 的一种新的网络协议,它实现了浏览器与服务器 全双工(full-duplex)通信 ,允许 服务器主动发送信息给客户端 优点及作用 Http协议的弊端: Http协议为半双工协议。(半双工:同一时刻,数据只能在客户端和服务端一个方向上传输) Http协议冗长且繁琐 易

    2024年02月09日
    浏览(36)
  • SpringBoot+WebSocket实现即时通讯(四)

    紧接着上文《SpringBoot+WebSocket实现即时通讯(三)》 本博客姊妹篇 SpringBoot+WebSocket实现即时通讯(一) SpringBoot+WebSocket实现即时通讯(二) SpringBoot+WebSocket实现即时通讯(三) SpringBoot+WebSocket实现即时通讯(四) 用户管理:业务自己实现,暂从数据库添加 好友管理:添加好

    2024年02月21日
    浏览(43)
  • uniapp使用WebSocket实现即时通讯

    UniApp是一个基于Vue.js的跨平台应用开发框架,它允许开发者使用HTML、CSS和JavaScript构建多平台的移动应用程序。要使用WebSocket在UniApp中实现即时通讯功能,你可以按照以下步骤进行操作: 在UniApp项目的根目录下,找到 manifest.json 文件并打开它。 在 manifest.json 文件中,添加以下

    2024年02月06日
    浏览(39)
  • 【websocket】Node+Vue2+WebSocket实现前后端通讯

    WebSocket是一个长连接,客户端可以给服务端发送消息,服务端也可以给客户端发送消息,是 全双工通信。 平时的前后端分离项目,是前端请求结果获取后端服务器数据,从而渲染到页面,服务端无法主动向客户端发起消息,某些需求场景下,一旦客户端 需要知道服务端的频

    2024年02月02日
    浏览(48)
  • qt websocket 通讯实现消息发送接收

    websocket 是基于 TCP socket 之上的应用层, 解决 HTML 轮询连接的问题,实现客户端与服务端长连接, 实现消息互相发送,全双工。 服务端, 使用 QT 教程demo chatserver.h chatserver.cpp main.cpp 客户端 clientwidget.h clientwidget.cpp websocketclient.h websocketclient.cpp

    2024年02月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包