当前位置:  技术问答>linux和unix

请教一个与服务器通信时数据收取一段时间后死掉的问题

    来源: 互联网  发布时间:2016-06-05

    本文导语:  我做一个与服务器通信的程序,目前可以正常的收取数据,但是在接受视频数据时到大概2分钟的时候会死掉,请各位指教,我会一直关注的,要相关代码的请讲 | 把自己recv的buf设置大一点。 此外,...

我做一个与服务器通信的程序,目前可以正常的收取数据,但是在接受视频数据时到大概2分钟的时候会死掉,请各位指教,我会一直关注的,要相关代码的请讲

|


把自己recv的buf设置大一点。

此外,还可以把底层的接受缓冲区设置大。

http://blog.csdn.net/hairetz/archive/2009/04/16/4083389.aspx

在send()的时候,返回的是实际发送出去的字节(同步)或发送到socket缓冲区的字节
(异步);系统默认的状态发送和接收一次为8688字节(约为8.5K);在实际的过程中发送数据
和接收数据量比较大,可以设置socket缓冲区,而避免了send(),recv()不断的循环收发:
// 接收缓冲区
int nRecvBuf=32*1024;//设置为32K
setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
//发送缓冲区
int nSendBuf=32*1024;//设置为32K
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));

|
我能想到的情况有以下几点:

1、客户端和服务器端,哪个先死?这个非常重要!哪一段主动打死的连接

2、网络是否稳定?比如,会不会是server端重发消息太多,导致缓冲区满了所致。或者链路层外发消息队列满了,

导致无法接受新进的上层消息等。

3、进程运行状态是否异常

4、能否抓到交互的包?

|
冲你的描述,猜测一个原因:你在client端接收数据,但是在接受大概两分钟的时候,通信就会终止,对吧?

你检查一下client端接收进程的缓冲区是否足够,如果缓冲区不够,程序要是越界了,可能会被OS杀掉。

|
注意一下你的多线程或多进程处理,是否有互斥同步的不够的地方...
你可以先测试一下单一进程或单一线程的方式,
也测试一下只接收一个服务器源数据的方式...

|
貌似 104 是这个吧:
#define ECONNRESET      104     /* Connection reset by peer */

|
程序死掉了,去抓包干什么? 抓到包又能干什么呢?
程序死掉一般都是内存非法操作,所以-g参数重新编译你的程序,然后修改linux环境,让程序死掉的时候自动生成core文件,最后用gdb分析core文件。看到低是执行到哪一条语句出错了。
怎么修改linux环境生成core文件,自已去google一下。

|
最好有 wireshark 抓包的,贴上来看看...

|


提个傻办法,再起一个进程来监控。检测不到就重启一个。2分钟会死掉,怎么看好像是资源被占用没被释放?程序大,功能多的话,建议屏蔽掉一定功能再测试。如果还死,就说明问题在现存的功能内。然后继续分离排除吧。。

|
你可以这样测试一下,你把缓冲区增大或者缩小一倍。如果是因为缓冲区引起的问题,那接收数据的时间就会变

为原来的一半或者一倍,然后程序才能crash掉。

如果真是这个问题,那没办法了,你只能增大缓冲区,然后分步接收数据,这样能保证用最少的缓冲实现连续播放

|


看下errono是什么?

|
那返回 -1 后,errno 是什么...

|
104就是连接已经复位了,也就是这个连接已经由另一端断开了。

    
 
 

您可能感兴趣的文章:

  • 请教串口通信的编程
  • 请教网络通信高手~~~~
  • 关于socket通信,C的代码,有个问题请教高手!
  • 请教:关于两台计算机通信的测试
  • 请教:串口通信问题
  • 请教unix进程间通信的几种模式,以及区别?
  • 请教大家,是否有关于Applet于服务器通信的介绍。
  • 请教进程通信
  • 请教串口通信中用超级终端配置时数据解析
  • 请教socket通信中的一个小问题,打印客户端的地址会发出警告
  • 请教一个问题:application 如何连接servlet 通信?
  • 请教子线程之间通信的问题
  • 请教一个局域网通信的问题(急)
  • 高分请教,applet和javabean之间如何通信?
  • 请教:arm开发板与pc通过wifi连接能ping通但无法socket通信
  • 【请教】本人对某TCP通信抓包分析,是否成功完成三次握手(附图)
  • 关于tcp中客户端和服务端通信模式的请教
  • 请教各位大虾一个关于进程间通信的程序问题!
  • 请教一下LINUX下的网口通信为什么在连接的时候总是提示connect refuse
  • 倾尽家财请教一个管道通信的简单问题!谢谢大家
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教,请教,这个问题是为什么????
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 请教这种循环的执行过程
  • 请教两个redhat9问题
  • 请教如何在指定目录下查找包含指定文字的文件
  • 请教局域网中如何通过ip地址得到主机名
  • 请教kdevelop的问题
  • 请教linux 下的adsl拨号问题.
  • 请教,如何用虚拟订机安装liux
  • 【请教】LINUX 下SNMP的MIB开发
  • 请教一个opengl的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3