zoukankan      html  css  js  c++  java
  • agsXmpp框架使用经验两则

    最近在项目中应用到了agsxmpp框架,主要的目的是在项目中嵌入一个实时沟通(包括文本、语音聊天,群会议)模块,通过比较后决定采用agsxmpp框架实现,开始的时候很容易,根据官网上提供的示例进行修改,很快的实现了功能。但是今天在测试的时候发现了一个问题,在早期的开发过程中,服务器和客户端都是在同一台机器上,所以很容易连接成功,但是现在测试的时候服务器和客户端不是一台机器上就连接不上了。在连接时报错如下:

    ---------------------------
    错误
    ---------------------------
    连接语音服务器失败!可能的错误原因为: 无法将数据写入传输连接: 由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。。
    ---------------------------
    确定  
    ---------------------------

    ---------------------------
    错误
    ---------------------------
    连接语音服务器失败!可能的错误原因为: 一个封锁操作被对 WSACancelBlockingCall 的调用中断。 192.168.7.245:10000
    ---------------------------
    确定  
    ---------------------------

    开始的时候怀疑是防火墙的原因,因为在本机是不会报错的,只有连接远程主机的时候才报错。但把服务器和客户端的防火墙都关闭后还是不行,错误依旧。看来不是设置的事,肯定是代码写的有问题了,后来费了好多事,终于找到了原因:官网提供的示例是以ri.Jid = new Jid("item" + i.ToString() + "@localhost");的样式建立的jid,我修改代码时没有将localhost改为服务器的IP,所以导致连接远程服务器无法成功。既然找到了原因就好办了,将所有的localhost都修改为服务器的IP就可以了。

    本来以为万事大吉了,但没想到还遇到了一个问题,就是我原先引用的是0.9.2.0版本的,现在改为1.1.0.0版本的了,结果发现两个版本有些细节的要求不一样,比如我原先是以ri.Jid = new Jid(ri.Name, SocketIP, dtUsers.Rows[i]["USER_SYSID"].ToString());的样式循环建立用户列表发到客户端的,(请注意第三个参数resource本来是用不到的,但我赋值为用户ID,然后在客户端使用),但这行代码在0.9.2.0中可以使用到了1.1.0.0中就报agsXMPP.Idn.Stringprep Exception,导致客户端得不到用户列表。将上面的代码改为ri.Jid =  new Jid(ri.Name + "@" + SocketIP);终于一切正常。

  • 相关阅读:
    gnome-shell 使用 notify-send 发送桌面消息
    fedora 中从命令行中直接打开资源管理器
    wget curl 的 使用方法
    NFS 系统的搭建 on fedora; nfs 搭建 on ubuntu 1806;
    -bash: ./switch.sh: /bin/bash^M: bad interpreter: No such file or directory
    Linux 快速查看系统配置-熟悉新环境的配置
    2019-11-7-WPF-How-to-get-plain-text-from-RichTextBox
    2018-8-10-git-push-错误-hook-declined-
    2018-12-25-win2d-图片水印
    2018-8-10-win10-UWP-用Path画图
  • 原文地址:https://www.cnblogs.com/zhangronghua/p/1445812.html
Copyright © 2011-2022 走看看