服务器端:

  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <netinet/in.h>
  4. #include <arpa/inet.h>
  5. #include <unistd.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9. #include <fstream>
  10. #include <sstream>
  11. #include <iostream>
  12. #include <vector>
  13. #include <error.h>
  14. using namespace std;
  15.  
  16. int main()
  17. {
  18. double bs_x[] = {,-,,,-};
  19. double bs_y[] = {,,,-,-};
  20. //vector<vector<double> > tdoa;
  21. double tdoa[][];
  22.  
  23. ifstream infile("otdoa.txt");
  24. if( !infile)
  25. {
  26. cout << "can't open otdoa.txt" << endl;
  27. return -;
  28. }
  29. int i = ;
  30. int j = ;
  31. while(infile)
  32. {
  33. string line;
  34. double a;
  35. //vector<double> ta;
  36. /*infile >> line;
  37. istringstream stream(line);
  38. int j = 0;
  39. while(stream >> a)
  40. {
  41. tdoa[i][j] = a;
  42. j++;
  43. }*/
  44. if( j == )
  45. {
  46. i++;
  47. j = ;
  48. }
  49. infile >> tdoa[i][j];
  50. j++;
  51. if(infile.peek() == '\n')
  52. break;
  53. }
  54. infile.close();
  55.  
  56. int listenfd,confd;
  57. struct sockaddr_in servaddr;
  58.  
  59. listenfd = socket(AF_INET,SOCK_STREAM,);
  60. if(listenfd < )
  61. {
  62. cout << "can't open socket" << endl;
  63. return -;
  64. }
  65.  
  66. bzero(&servaddr,sizeof(servaddr));
  67. servaddr.sin_family = AF_INET;
  68. servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  69. servaddr.sin_port = htons();
  70.  
  71. if( bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) < )
  72. {
  73. //cout << "bind error" << endl;
  74. perror("bind error");
  75. return -;
  76. }
  77.  
  78. if( listen(listenfd,) < )
  79. {
  80. cout << "listen error" << endl;
  81. return -;
  82. }
  83.  
  84. i = ;
  85.  
  86. //confd = accept(listenfd,(struct sockaddr*)NULL,NULL);
  87. while()
  88. {
  89. confd = accept(listenfd,(struct sockaddr*)NULL,NULL);
  90. if( confd < )
  91. {
  92. cout << "accept error" << endl;
  93. return -;
  94. }
  95. pid_t pid;
  96. pid = fork();
  97. if( pid == )
  98. {
  99. close(listenfd);
  100. cout << "child" << endl;
  101. send(confd,bs_x,sizeof(bs_x),);
  102. send(confd,bs_y,sizeof(bs_y),);
  103. send(confd,tdoa[i],sizeof(tdoa[i]),);
  104. //close(confd);
  105. break;
  106. }
  107. cout << "parent" << endl;
  108. close(confd);
  109.  
  110. i++;
  111. sleep();
  112. }
  113. cout << "child exit" << endl;
  114. close(confd);
  115. return ;
  116. }

客户端:

  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <netinet/in.h>
  4. #include <arpa/inet.h>
  5. #include <unistd.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9. #include <fstream>
  10. #include <sstream>
  11. #include <iostream>
  12. using namespace std;
  13.  
  14. int main()
  15. {
  16. struct data
  17. {
  18. double bs_x[];
  19. double bs_y[];
  20. double tdoa[];
  21. }data_t;
  22. struct data revdata;
  23. char buf[];
  24. int sockfd;
  25. struct sockaddr_in addr;
  26.  
  27. sockfd = socket(AF_INET,SOCK_STREAM,);
  28.  
  29. bzero(&addr,sizeof(addr));
  30. addr.sin_family = AF_INET;
  31. addr.sin_addr.s_addr = inet_addr("127.0.0.1");
  32. addr.sin_port = htons();
  33.  
  34. if( connect(sockfd,(struct sockaddr*)&addr,sizeof(addr)) < )
  35. {
  36. cout << "connect error" << endl;
  37. return -;
  38. }
  39.  
  40. struct sockaddr_in testaddr;
  41. bzero(&testaddr,sizeof(testaddr));
  42. getsockname(sockfd,(struct sockaddr*)&testaddr,NULL);
  43. char bbb[];
  44. inet_ntop(AF_INET,&testaddr.sin_addr,bbb,sizeof(testaddr));
  45. cout << bbb << endl;
  46. cout << ntohs(testaddr.sin_port) << endl;
  47. while()                                            //死循环
  48. {
  49. //menset(&buf,sizeof(buf));
  50. if( recv(sockfd,buf,sizeof(revdata),MSG_WAITALL) < )  //当服务器端断开连接时,recv失效
  51. {
  52. cout << "recieve msg erro" << endl;
  53. return -;
  54. }
  55.  
  56. bzero(&revdata,);
  57. memcpy(&revdata,buf,sizeof(revdata));
  58.  
  59. for(int i = ; i < ; i++)                //但是这里一直在死循环中输出
  60. {
  61. printf("[%d]\t",i+);
  62. cout << revdata.bs_x[i] <<" "
  63. << revdata.bs_y[i] << " "
  64. << revdata.tdoa[i] << endl;
  65. }
  66. }
  67. close(sockfd);
  68. return ;
  69.  
  70. }

因为recv在客户端的死循环中,当服务端断开连接时,recv失效

SOCKET编程:为什么recv不阻塞的更多相关文章

  1. 基于MFC的socket编程(异步非阻塞通信)

       对于许多初学者来说,网络通信程序的开发,普遍的一个现象就是觉得难以入手.许多概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)等,初学者往往迷惑不清, ...

  2. 【转】【win网络编程】socket中的recv阻塞和select的用法

    在编写ftp客户端程序时,在联通后使用recv函数进行接收欢迎信息时,需要申请内存进行接收数据保存,一次读取成功,但是由于一个随机的ftp服务端在说,欢迎信息的大小是不知道的,所以在尝试使用死循环,在 ...

  3. Linux 网络编程七(非阻塞socket:epoll--select)

    阻塞socket --阻塞调用是指调用结果返回之前,当前线程会被挂起.函数只有在得到结果之后才会返回. --对于文件操作 read,fread函数调用会将线程阻塞(平常使用read感觉不出来阻塞, 因 ...

  4. socket编程里的read和recv函数【转载】

    本文转载自:http://blog.163.com/like12@126/blog/static/63023403201291983117551/ 1.read 与 recv 区别 read 原则: ...

  5. socket编程的同步、异步与阻塞、非阻塞示例详解

     socket编程的同步.异步与阻塞.非阻塞示例详解之一  分类: 架构设计与优化 简介图 1. 基本 Linux I/O 模型的简单矩阵 每个 I/O 模型都有自己的使用模式,它们对于特定的应用程序 ...

  6. socket编程 —— 非阻塞socket (转)---例子已上传至文件中

    在上一篇文章 <socket编程——一个简单的例子> http://blog.csdn.net/wind19/archive/2011/01/21/6156339.aspx 中写了一个简单 ...

  7. socket编程中write、read和send、recv之间的区别~转载

    socket编程中write.read和send.recv之间的区别   http://blog.csdn.net/petershina/article/details/7946615 一旦,我们建立 ...

  8. java socket编程开发简单例子 与 nio非阻塞通道

    基本socket编程 1.以下只是简单例子,没有用多线程处理,只能一发一收(由于scan.nextLine()线程会进入等待状态),使用时可以根据具体项目功能进行优化处理 2.以下代码使用了1.8新特 ...

  9. [转]Socket编程中,阻塞与非阻塞的区别

    阻塞:一般的I/O操作可以在新建的流中运用.在服务器回应前它等待客户端发送一个空白的行.当会话结束时,服务器关闭流和客户端socket.如果在队列中没有请示将会出现什么情况呢?那个方法将会等待一个的到 ...

  10. Socket编程中,阻塞与非阻塞的区别

    阻塞:一般的I/O操作可以在新建的流中运用.在服务器回应前它等待客户端发送一个空白的行.当会话结束时,服务器关闭流和客户端socket.如果在队列中没有请示将会出现什么情况呢?那个方法将会等待一个的到 ...

随机推荐

  1. delphi 数组类型

    数组类型 数组类型定义了一组指定类型的元素序列,在方括号中填入下标值就可访问数组中的元素.定义数组时,方括号也用来指定可能的下标值.例如,下面的代码中定义了一个有 24 个整数的数组:type     ...

  2. C++11新特性,利用std::chrono精简传统获取系统时间的方法

    一.传统的获取系统时间的方法 传统的C++获取时间的方法须要分平台来定义. 相信百度代码也不少. 我自己写了下,例如以下. const std::string getCurrentSystemTime ...

  3. [Javascript] Monads

    Monads allow you to nest computations. They are a pointed functor that adds mjoin and chain function ...

  4. innodb_max_dirty_pages_pct与检查点的关系

      http://ourmysql.com/archives/310 数据库运行一段时间后,经常导致服务器大量的swap,我怀疑是innodb中的脏数据太多了,因为没有free space了,mysq ...

  5. mysql 重要维护工具 图解

        下载地址: http://maatkit.org/get/mk-query-digest更多信息: http://maatkit.org/ | http://code.google.com/p ...

  6. 网络IPC:套接字

    网络进程间通信(network IPC):不同计算机(通过网络相连)上运行的进程相互通信的机制. 套接字网络IPC接口:进程能够使用该接口和其他进程通信.通过该接口,其他进程运行位置是透明的,它们可以 ...

  7. C# 之 Int16 Int32 Int64 的区别

    Int16 值类型表示值介于 -32768 到 +32767 之间的有符号整数. Int32 值类型表示值介于 -2,147,483,648 到 +2,147,483,647 之间的有符号整数. In ...

  8. Android进阶笔记16:ListView篇之ListView刷新显示(全局 和 局部)

    一.ListView内容变化后,动态刷新的步骤(全局刷新): (1)更新适配器Adapter数据源:(不要使用匿名内部类) (2)调用适配器Adapter的刷新方法notifyDataSetChang ...

  9. jQuery中利用JSONP解决AJAX跨域问题

    写在前面 跨域的解决方案有多种,其中最常见的是使用同一服务器下的代理来获取远端数据,再通过ajax进行读取,而在这期间经过了两次请求过程,使得获取数据的效率大大降低,这篇文章蓝飞就为大家介绍一下解决跨 ...

  10. DedeCMS更新文章同步发布到新浪微博

    如果在网站推广过程中能利用好微博这个工具的话,将会给网站的推广工作带来巨大的便利.下面以dede程序为例讲讲如何将网站内容自动同步到新浪微博. 在新浪微博的工具中有个自动关联博客的功能,利用好这个功能 ...