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

关于socket select通信,为什么这样?

    来源: 互联网  发布时间:2016-07-15

    本文导语:  这个到底是什么原因呢? 运行服务器端读取文件发给客户端,然后运行客户端,客户端接收数据创建文件保存数据,但是客户端这边创建的文件里面老有乱码,很多东西都不正常。但是把客户端给关掉,服务器端保...

这个到底是什么原因呢?
运行服务器端读取文件发给客户端,然后运行客户端,客户端接收数据创建文件保存数据,但是客户端这边创建的文件里面老有乱码,很多东西都不正常。但是把客户端给关掉,服务器端保持运行,然后再打开客户端,就正常了。
只要服务器端不关,客户端随便关掉或者运行,都是第一次出现问题,以后就一直是好的了。到底什么原因呢?

|
知道为什么么?

你对字符串还不是完全了解。一个buffer里装这许多字符,并不代表他是字符串。因为字符串有一个标示''。
假如有下面两个buffer.按10个字节举例。
buffer1:
     1234567890
buffer2:
     123456789''  //''这是一个字节。

buffer1里面虽然都是字符,但它不能叫做字符串,所以也不能使用strxxxx()函数来操作,带来的后果是不可预测的,有时可能对,有时可能错,而且错的很离谱。因为buffer1以外的空间,哪里是''谁也不知道。

此外,buffer2的空间是10字节,但他的字符串是9。strlen()=9。这些地方要注意。

|
早就跟你说过用来select。用一个的话也行,但是得打标记

|
好几天没上来了。怎么又是你。

|
判断一个buffer为不为零,效率很低。基本上就是一个字节一个字节的比较。
你可以定义一个变量,buf清空的时候,把变量顺便赋成 1 ,buf写的时候,再把变量赋成 0 ,这样就可以判断变量来判断buffer了。
但总感觉你的buffer好像不用这么操作。

Ready!啊,有创意。万一你文章里也有Ready!怎么办?

|
先标记下,晚上有时间看看

小伙很努力。呵呵

|
我想问下,你客户端接收到的文件内是不是有文件空洞(asc码等于0的字符)?

客户端是不是可以去掉  FD_SET(sockfd,&writefds); ,因为看到客户端并没有发送数据。
然后设置一个标志变量,接收到数据flag = true;  往文件内写数据的时候判断flag,如果为真,写入文件,并将flag = false。


|
因为第二次循环的时候,有可能没有收到数据,但是写描述符集总是为真,导致写入如下的buf
写入文件。

memset(buf,0,12024);
fwrite(buf,len,1,fp);

那么写入了1024个文件空洞

而且接收数据的时候,你的select可以设置的长点,如果超时,就当成服务器端dump了,文件接收失败,程序退出。

    
 
 

您可能感兴趣的文章:

  • php实现socket实现客户端和服务端数据通信源代码
  • 操作系统 iis7站长之家
  • SSL握手通信详解及linux下c/c++ SSL Socket代码举例
  • 两个 Socket 互相通信,其中一个如何判断另一个 Socket 是否已经意外断开了连接?
  • linux下用socket实现多进程间通信问题?
  • 怎样提高j2me中socket通信速度???
  • FIFO和Socket通信的并发效率问题
  • socket 通信!
  • 关于多网口socket通信的简单问题
  • socket通信
  • linux客户端程序能否和windows端的服务器程序进行socket通信?
  • Windows VMWare虚拟机socket通信问题
  • 征求Socket通信例程代码
  • Linux下的Socket通信如何断开连接的端口从而实现重复使用该端口
  • 初学内核编程,在内核态下怎么用socket通信?
  • linux与Windows socket通信,乱码
  • 基于socket的linux和Windows通信程序为什么运行特别慢?
  • C和Java的Socket通信问题
  • 关于socket通信问题
  • 关于socket通信,C的代码,有个问题请教高手!
  • socket通信 请求应答
  • select+read 读服务器发送过来的数据, 假设服务器调用close后, 客户端的select是否返回这个socket可读?
  • socket通讯使用select的问题
  • socket select异常?
  • select和非阻塞socket的迷惑
  • socket编程select对accept的影响
  • 请教linux下管理多个socket用什么,难道只能用select?
  • socket select()能否取得剩余时间
  • socket编程中的select问题
  • socket中的select模型问题
  • linux下用C写socket程序编程中的select里面的timeout的值的单位到底是什么?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?
  • java命名空间java.net类socket的类成员方法: gettrafficclass定义及介绍
  • socket编程 通过man socket, 没有找到socket函数的第一参数该填什么 怎样利用man手册
  • java命名空间java.net类socket的类成员方法: getport定义及介绍
  • 线程间可否通过管道传递SOCKET句柄?还有其他方式传递SOCKET么?
  • java命名空间java.net类socket的类成员方法: getlocalport定义及介绍
  • [FreeBSD] 大神,求解,control socket : can‘t to any socket
  • java命名空间java.net类socket的类成员方法: getinetaddress定义及介绍
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!
  • java命名空间java.net类socket的类成员方法: isconnected定义及介绍
  • 我的ping程序怎么老是出现Socket operation on non-socket


  • 站内导航:


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

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

    浙ICP备11055608号-3