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

socket编程,建立连接后为何必须不断地发送,只要间隔3s再发送,对方就收不到数据了?怎么办?谢谢

    来源: 互联网  发布时间:2015-12-08

    本文导语:  //Serial  Net #include           /*标准输入输出定义*/ #include          /*标准函数库定义*/ #include          /*Unix 标准函数定义*/ #include        #include         #include           /*文件控制定...

//Serial  Net


#include           /*标准输入输出定义*/
#include          /*标准函数库定义*/
#include          /*Unix 标准函数定义*/
#include       
#include        
#include           /*文件控制定义*/
#include         /*PPSIX 终端控制定义*/
#include           /*错误号定义*/

#include     
#include     

#include     
#include     
#include     
#include     
#define     FALSE   0
#define     TRUE    1

 
 

char * host_name="192.168.3.18";
int  server_port=8000;


#define MAXDATASIZE 1024

int main(int argc,char ** argv)
{

    int i;
    
    int socket_fd;     
    int max_fd;
    struct sockaddr_in server_addr;
    
    fd_set rd_set,wr_set,er_set;

    struct timeval timeout;

    int ret;
char com_recv_buf[MAXDATASIZE];
char com_send_buf[MAXDATASIZE];
    char socket_recv_buf[MAXDATASIZE];
char socket_send_buf[MAXDATASIZE];

    unsigned int recv_len,send_len;

 
for(;;)//网络通信
{
 //客户端建立连接

  for(;;)
  {
  sleep(5);
  printf("nconnecting to serverhost");
  bzero(&server_addr,sizeof(server_addr));
  server_addr.sin_family=AF_INET;  
  server_addr.sin_addr.s_addr = inet_addr(host_name); 
  server_addr.sin_port=htons(server_port);

  if((socket_fd=socket(AF_INET,SOCK_STREAM,0))==-1)
  {
    printf("nError openning socket");
    close(socket_fd);
continue;
  }
  printf("nStart Connect ..."); 
  fcntl(socket_fd, F_SETFL, O_NONBLOCK);//设为非阻塞
  printf("nStart Connect 1 ...");
  if(connect(socket_fd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))==-1)
  {
    printf("nError connect ...errno = %d ",errno);
    
sleep(10);
break;
  } 
  else
  {    
     break;
  }     

  }

  printf("nConnect OK...");
 
  max_fd = (socket_fd > com_fd ? socket_fd : com_fd) + 1;

  FD_ZERO(&rd_set);
  FD_ZERO(&wr_set);
  FD_ZERO(&er_set);
 
  FD_SET(socket_fd,&rd_set);
 
  FD_SET(socket_fd,&er_set);

  timeout.tv_sec=2;
  timeout.tv_usec=0;

  printf("nStart select ");

  while(1)
  {
    sleep(2);
   // printf("nStart select 1 ");
    ret=select(max_fd,&rd_set,&wr_set,&er_set,&timeout);

    if (ret

    
 
 

您可能感兴趣的文章:

  • socket发送端、接收端同一机器,kill掉接收端进程,发送端也被kill?
  • 用sendto(socket, buf, strlen(buf), ...)发送一个包,如何得到发送的源地址(也就是本机的源地址)
  • 同多个线程通过同一个socket发送数据,操作系统底层会同步每个发送操作吗
  • 通过socket连接一次性发送大数据量的问题
  • socket发送数据问题(50分)
  • vc通过socket发送数据给java的问题
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • 关于socket下的发送和接收缓冲区的问题
  • 发送大量数据,socket API最优分包长度为多少?
  • UDP SOCKET编程,不能发送广播数据包
  • getsockopt每次得到的socket的接收发送缓冲怎么都不一样
  • 我调用socket向外发送消息,为什么在发送的同时,会打印字符串到屏幕上
  • 请问如何判断从raw socket发出的包是哪个进程发送的?
  • 如何查看某socket的发送缓冲中的数据量呢?
  • [求助]请问socket编程中send()函数可以发送整形数据吗?
  • SOCKET发送奇怪问题!!!
  • 请问怎么通过Socket发送一个int数值?急,谢谢!!
  • 用socket的send发送一个自定义类的问题
  • socket中server是如何向多个client发送消息的?
  • socket断连后居然发送数据还能成功?
  • socket编程,我如何确定与对方的连接是否正常?
  • read一个socket, 发现read到的长度是0, 是否一定代表对方调用了close关闭了socket?
  • Socket连接中,如何读取对方发送过来的二进制(byte[])类型数据流?(一定给分)
  • UDP怎么检测对方socket已关闭无法接收数据?
  • AIX主机如何判断SOCKET连接对方的是什么进程
  • Socket通信中怎样探测对方网络已经出错?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍
  • socket编程 通过man socket, 没有找到socket函数的第一参数该填什么 怎样利用man手册
  • java命名空间java.net类socket的类成员方法: gettrafficclass定义及介绍
  • 线程间可否通过管道传递SOCKET句柄?还有其他方式传递SOCKET么?
  • java命名空间java.net类socket的类成员方法: getport定义及介绍
  • [FreeBSD] 大神,求解,control socket : can‘t to any socket
  • java命名空间java.net类socket的类成员方法: getlocalport定义及介绍
  • 两个 Socket 互相通信,其中一个如何判断另一个 Socket 是否已经意外断开了连接?
  • java命名空间java.net类socket的类成员方法: getinetaddress定义及介绍
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!
  • java命名空间java.net类socket的类成员方法: isconnected定义及介绍
  • 请问怎么通过Socket发送一个int数值?急,谢谢!! iis7站长之家


  • 站内导航:


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

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

    浙ICP备11055608号-3