问题标签 [communication-protocol]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1321 浏览

.net - .NET 双向套接字实时通信协议

我需要维护服务器和多个客户端之间的连接,以便客户端可以发送命令,服务器触发事件​​。服务器基本上是一个音乐播放器,客户端发送诸如“Play()”、“Pause()”、“GetPlaylists()”等命令。服务器端需要能够告诉客户端诸如“SongEnded”或“PlayerPaused”。此外,还需要可以来回发送一些数据(如当前歌曲、专辑图片、播放列表等)。我当然可以自己创建一个套接字并创建自己的协议来处理上述所有场景,但很可能有人已经在我之前完成了这项工作,所以我真正想要的是一个实时框架—— .NET 的服务器和客户端之间的通信。我' 例如,我查看了 xml-rpc,但不确定我应该如何处理“OnClientSend”。另外,如果我没记错的话,xml-rpc 被制作成类似于 REST 的。我也看过 wcf,但由于我没有使用它的经验,我不知道从哪里开始,以及如何在一个简单的控制台应用程序中托管服务器。

重要提示:客户端需要能够不是 .NET。
重要提示:这需要能够连接到 java (android)。
重要提示:主要平台是 Windows(服务器和客户端)和 Android(客户端)。
重要提示:不进行音频流式传输。但是,需要发送图像。

任何解决方案的想法将不胜感激。此外,如果您有一个好的框架的链接,或者关于如何使用 .NET 中已经存在的组件的描述,我会非常高兴。

[编辑] 问题是当通过套接字发送数据时,不能保证(根本!)您发送的包将同时被服务器读取。我可能会再次发送 50,然后是 100,然后是 50 字节,但是服务器可能会将其读取为 200 字节的块,或者先发送 100,然后再发送 100 等,这意味着我需要创建一个缓冲区,读取消息直到我确定(这个是问题)我收到了整条消息(仅此而已)。

0 投票
3 回答
8949 浏览

php - PDO 如何知道 MySQL 中最后插入的 id?

编辑:这个问题的标题最初是:Doctrine 如何知道 MySQL 中最后插入的 id?并且与Doctrine ORM mapper 有关。经过一番挖掘,我发现这个问题与Doctrine无关,而是与PDO_MySQLMySQL C API以及最后 - 与 MySQL 客户端-服务器通信有关。我决定更改标题,所以也许有人会找到他/她的问题的答案。

对于那些不使用 Doctrine 的人:我很好奇,为什么如下:

或类似的:

将导致SELECT LAST_INSERT_ID()日志中只有一个位置(没有单独的 ):

原始问题:

我有 2 张桌子:

我创建了新的类别对象和产品对象。我将类别对象分配给产品对象。我没有设置任何ID:

之后,我刷新了连接并检查了 MySQL 日志:

Doctrine 怎么知道新创建的类别 id 是 312?日志中没有其他内容。

0 投票
6 回答
3482 浏览

sockets - 用不同语言编写的应用程序之间的通信

我正在考虑将几个应用程序链接在一起(全部用不同的语言编写,如 C#、C++、Python),但我不知道该怎么做。

我说的链接是什么意思?我正在开发的系统由小程序组成,每个小程序负责特定的处理任务。我需要能够轻松地将数据集从一个应用程序传输到另一个应用程序(所讨论的数据集并不大,可能只有几兆字节)并且我还需要某种形式的方法来控制操作的当前状态(这是客户端-服务器模型敲响警钟的地方)

似乎套接字或 SOAP 将是一个通用解决方案,但只是想就人们对这个主题的看法获得一些意见。

评论/建议将不胜感激,谢谢!

0 投票
3 回答
22907 浏览

c++ - 在 C/C++ 中实现通信协议

我正在开始在软件中实现一些专有的通信协议栈,但不知道从哪里开始。这是我以前从未做过的工作,我正在寻求最佳/推荐方法的资源方面的帮助。

我将使用 c/c++,我可以自由使用库(BSD/BOOST/Apache),但没有 GPL。我已经广泛使用 C++,所以使用 C++ 的特性不是问题。

协议栈共有三层,并且已经完全指定并正式验证。所以我需要做的就是用指定的语言实现和测试它。还应该提到,协议非常简单,但可以通过可靠的物理传输层在不同的设备上运行。我知道协议状态机的事件、输入、输出、副作用和行为。一般情况下,接收中断来读取从物理层接收到的消息以读取它并发送到等待设备。接收设备可以处理响应消息并将其传递给协议层以在物理层上发送出去。

任何有关参考/建议的帮助将不胜感激。如果只是为了帮助我理解如何实现它们,我愿意使用不同的语言,但我最终将不得不求助于选择的语言。

更新:我希望实现的示例协议类似于SNEP

我不需要担心连接管理。我们可以假设连接已经建立,并且协议所做的是数据交换,其中协议消息已经在规范中得到很好的定义

0 投票
1 回答
5432 浏览

.net - SQL Server 共享内存通信协议使用

我在互联网上阅读了很多类似主题的文章和答案,但没有找到问题的原因。

我有一个 .NET 4 Windows 服务连接到同一台机器上的 SQL Server Express。只有一次在生产中碰巧看到以下错误:

“与服务器成功建立连接,但在登录过程中发生错误。(提供者:命名管道提供者,错误:0 - 管道的另一端没有进程。)”。

如果我们使用命名管道协议,则出现此错误的原因很明显,因为我们尚未在服务器上启用它们。但是我的问题是为什么可以在这里使用命名管道协议?在连接字符串中,我们使用了“ Data Source=.\SQLEXPRESS ”。考虑到 msdn 和互联网上的信息,我的理解是当“。” 始终使用“共享内存协议”。那么必须发生什么才能让 ADO.NET SqlClient 决定使用命名管道协议呢?

大多数时候一切都很好,但我需要知道这个过程,以便我们可以在需要时防止这种类型的任何进一步错误。

在此先感谢,托多

0 投票
4 回答
130 浏览

custom-protocol - 编程应用程序级协议的方法?

我正在用 C# 做一些简单的套接字编程。我试图通过从客户端控制台读取用户名和密码、将凭据发送到服务器并从服务器返回身份验证状态来对用户进行身份验证。基本的东西。我的问题是,如何确保数据采用服务器和客户端都期望的格式?

例如,这是我在客户端读取用户凭据的方式:

在这里,我在客户端用冒号(或其他符号)分隔用户名和密码。在服务器上,我只是使用“:”作为标记来拆分字符串。这行得通,但似乎有点……不安全。不应该有某种分隔符标记在客户端和服务器之间共享的分隔符令牌,所以我不必像这样硬编码它吗?

服务器响应也是类似的事情。如果身份验证成功,我如何以客户端期望的格式发回响应?我会简单地发送一个“SUCCESS”或“AuthSuccessful=True/False”字符串吗?我如何确保客户端知道服务器发送数据的格式(除了将其硬编码到客户端中)?

我想我要问的是如何设计和实现应用程序级协议。我意识到它对您的应用程序来说是独一无二的,但是程序员通常使用的典型方法是什么?此外,您如何保持格式一致?我也非常感谢有关此问题的文章的链接。

0 投票
3 回答
74949 浏览

security - HTTPS 和 SSL 的区别

HTTPS 和 SSL 有什么区别?我阅读了它们并发现了以下内容:

  • HTTPS:HTTPS 是 HTTP 与 SSL/TLS 的组合。这意味着 HTTPS 基本上是 HTTP 连接,它提供使用 SSL/TLS 保护的数据。

  • SSL:SSL 是一种安全协议,工作在 HTTP 之上以提供安全性。这意味着 SSL 加密数据将使用 HTTP 等协议进行路由以进行通信。

我想知道这两者之间的区别在哪里?还是两者相同?

0 投票
1 回答
5927 浏览

c++ - 使用 C++ 或 Objective C 应用程序与 RTMP 服务器通信

是否可以使用 C++ 或 Objective C 应用程序与 rtmp 服务器进行通信,例如 flash player 这样做?我知道这一定是可能的,因为 Flash 播放器是用 C++ 编写的并使用 C++ 库。如果你知道怎么做,请给我看代码示例!感谢您的帮助!

0 投票
1 回答
654 浏览

algorithm - 查找使用的加密或散列方法

我试图找出客户端应用程序使用什么算法来返回会话密钥。

当我启动连接时,服务器首先发送一个唯一的会话密钥。然后,客户端必须使用加密或散列密码进行响应,并将用户名与用户名一起发送到服务器。

客户端和服务器之间的示例网络跟踪:(用户名:serv1ce / 密码:test12)

从服务器收到的应用程序 << 52 d7 1c 3f 9f 2c 05 c9(一次会话密钥)
应用程序发送到服务器 >> 11 83 2d 7d ff 0c 51 8c 53 45 52 56 31 43 45 20

“53 45 52 56 31 43 45 20”部分是明文形式的用户名,作为字节值 (serv1ce)。

有谁知道如何使用密码“test12”和 64 位(8 字节)会话密钥“52 d7 1c 3f 9f 2c 05 c9”创建字节“11 83 2d 7d ff 0c 51 8c”?

0 投票
1 回答
272 浏览

.net - 如何从网站查询我的 Windows 应用程序

我试图弄清楚如何使用互联网作为通信线路在两台机器之间创建通信。

主意

我希望有一个 Windows 服务/应用程序首先知道如何与网站交谈(这很容易),但从那时起,网站应该查询该机器并询问信息

设想

假设我在我的机器上安装了这个应用程序,我设置了本地数据库的位置和方式,现在我希望能够使用网页来查询该数据库。

协议

我试图弄清楚PPP(点对点)协议,这个想法是我们经常与种子一起使用的东西......但我在 .NET 下找不到任何信息

提出

所有这一切的主要建议是让人们更容易安装此应用程序(主要是 Web 服务),但避免教他们如何设置域名以指向他们的服务器,以及弄清楚如何获取端点刚刚安装的网络服务...我想“嘿,请安装并设置您的凭据,让我来配置

有没有我可以用来创建这样的环境的库?