求助,C# socket 服务布署到服务器后,显示“远程主机强迫关闭了一个现有的连接”

佛不问苍生 2018-01-22 10:25:35
我用如下方法进行消息接收,在多台win7和win10下布署后测试收发都没有问题。换到服务器上Server 2012,就提示远程主机强迫关闭了一个现有的连接。
把代码复制到服务器上调试,发现连接不稳定,重连,2,3秒后就断开。
在 int len = clientSocket.Receive(receive_buffer); 这里抛出异常。
有哪位大神知道这是什么问题吗?程序身的问题还是服务器有某种规则限制?
服务器的防火墙已经关闭。
wcf服务中,已经配置

//wcf配置
 <binding name="wsBinding" receiveTimeout="00:05:00" sendTimeout="00:02:00"
maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="20000" maxStringContentLength="20000"
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="20000" />
<security mode="None"/>
</binding>


//socket 接收
private void receiveFruntion()
{
while (true)
{
if (isClosed)
{
break;
}
if (Common.Global.clsGlobalConst.isConnected)
{
try
{
//接收消息
receive_buffer = new byte[4096];
int len = clientSocket.Receive(receive_buffer);
if (len == 0)
{
continue;
}

if (ssV2 != null)
{
ssV2.threadReceiveMsg(receive_buffer);
}
}
catch
{
Common.Global.clsGlobalConst.isConnected = false;
}
}
}
}
...全文
811 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shoppo0505 2018-01-22
  • 打赏
  • 举报
回复
对方端口太忙了吧
佛不问苍生 2018-01-22
  • 打赏
  • 举报
回复
引用 5 楼 xian_wwq 的回复:
[quote=引用 4 楼 a200507002 的回复:] 现在测试是虚拟机有问题,连接就断开。在主机上测试就没有问题。
使用minisniffer等类似工具, 查看数据收发是否正常?[/quote] 应该是虚拟机的问题。 我在两端都用socket工具测试,发现一直在断线重连,断线重连。 换到主机上去测试就没有这个问题。主机连接半个小时了,没有断过。
xian_wwq 2018-01-22
  • 打赏
  • 举报
回复
引用 4 楼 a200507002 的回复:
现在测试是虚拟机有问题,连接就断开。在主机上测试就没有问题。
使用minisniffer等类似工具, 查看数据收发是否正常?
佛不问苍生 2018-01-22
  • 打赏
  • 举报
回复
引用 3 楼 xian_wwq 的回复:
1.需要搞清楚是特定的一台server2012机器上有问题, 还是server2012的服务器上都有问题 2.没有看到解析代码, 解析超时也会导致socket的异常 要提高效率,最好是将数据接收和解析异步化
现在测试是虚拟机有问题,连接就断开。在主机上测试就没有问题。
xian_wwq 2018-01-22
  • 打赏
  • 举报
回复
1.需要搞清楚是特定的一台server2012机器上有问题, 还是server2012的服务器上都有问题 2.没有看到解析代码, 解析超时也会导致socket的异常 要提高效率,最好是将数据接收和解析异步化
佛不问苍生 2018-01-22
  • 打赏
  • 举报
回复
引用 1 楼 shoppo0505 的回复:
对方端口太忙了吧
没有。 我就自己搭建的两个点。 不知道是不是虚拟机的问题。
Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。 Redis支持主从同步。数据可以从主服务向任意数量的从服务上同步,从服务可以是关联其他从服务的主服务。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。   本课程主要讲解以下内容:1. Redis的基本使用2. Redis数据库的数据类型3. Redis数据库数据管理4. Redis的主从复制5. Redis数据库的持久性6. Redis的高可靠性和集群7. Redis的优化和性能测试8. Redis服务的维护和管理9. Redis服务的常见问题排错 

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧