SOCKET编程:为什么recv不阻塞
服务器端:
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <fstream>
- #include <sstream>
- #include <iostream>
- #include <vector>
- #include <error.h>
- using namespace std;
- int main()
- {
- double bs_x[] = {,-,,,-};
- double bs_y[] = {,,,-,-};
- //vector<vector<double> > tdoa;
- double tdoa[][];
- ifstream infile("otdoa.txt");
- if( !infile)
- {
- cout << "can't open otdoa.txt" << endl;
- return -;
- }
- int i = ;
- int j = ;
- while(infile)
- {
- string line;
- double a;
- //vector<double> ta;
- /*infile >> line;
- istringstream stream(line);
- int j = 0;
- while(stream >> a)
- {
- tdoa[i][j] = a;
- j++;
- }*/
- if( j == )
- {
- i++;
- j = ;
- }
- infile >> tdoa[i][j];
- j++;
- if(infile.peek() == '\n')
- break;
- }
- infile.close();
- int listenfd,confd;
- struct sockaddr_in servaddr;
- listenfd = socket(AF_INET,SOCK_STREAM,);
- if(listenfd < )
- {
- cout << "can't open socket" << endl;
- return -;
- }
- bzero(&servaddr,sizeof(servaddr));
- servaddr.sin_family = AF_INET;
- servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
- servaddr.sin_port = htons();
- if( bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) < )
- {
- //cout << "bind error" << endl;
- perror("bind error");
- return -;
- }
- if( listen(listenfd,) < )
- {
- cout << "listen error" << endl;
- return -;
- }
- i = ;
- //confd = accept(listenfd,(struct sockaddr*)NULL,NULL);
- while()
- {
- confd = accept(listenfd,(struct sockaddr*)NULL,NULL);
- if( confd < )
- {
- cout << "accept error" << endl;
- return -;
- }
- pid_t pid;
- pid = fork();
- if( pid == )
- {
- close(listenfd);
- cout << "child" << endl;
- send(confd,bs_x,sizeof(bs_x),);
- send(confd,bs_y,sizeof(bs_y),);
- send(confd,tdoa[i],sizeof(tdoa[i]),);
- //close(confd);
- break;
- }
- cout << "parent" << endl;
- close(confd);
- i++;
- sleep();
- }
- cout << "child exit" << endl;
- close(confd);
- return ;
- }
客户端:
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <fstream>
- #include <sstream>
- #include <iostream>
- using namespace std;
- int main()
- {
- struct data
- {
- double bs_x[];
- double bs_y[];
- double tdoa[];
- }data_t;
- struct data revdata;
- char buf[];
- int sockfd;
- struct sockaddr_in addr;
- sockfd = socket(AF_INET,SOCK_STREAM,);
- bzero(&addr,sizeof(addr));
- addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = inet_addr("127.0.0.1");
- addr.sin_port = htons();
- if( connect(sockfd,(struct sockaddr*)&addr,sizeof(addr)) < )
- {
- cout << "connect error" << endl;
- return -;
- }
- struct sockaddr_in testaddr;
- bzero(&testaddr,sizeof(testaddr));
- getsockname(sockfd,(struct sockaddr*)&testaddr,NULL);
- char bbb[];
- inet_ntop(AF_INET,&testaddr.sin_addr,bbb,sizeof(testaddr));
- cout << bbb << endl;
- cout << ntohs(testaddr.sin_port) << endl;
- while() //死循环
- {
- //menset(&buf,sizeof(buf));
- if( recv(sockfd,buf,sizeof(revdata),MSG_WAITALL) < ) //当服务器端断开连接时,recv失效
- {
- cout << "recieve msg erro" << endl;
- return -;
- }
- bzero(&revdata,);
- memcpy(&revdata,buf,sizeof(revdata));
- for(int i = ; i < ; i++) //但是这里一直在死循环中输出
- {
- printf("[%d]\t",i+);
- cout << revdata.bs_x[i] <<" "
- << revdata.bs_y[i] << " "
- << revdata.tdoa[i] << endl;
- }
- }
- close(sockfd);
- return ;
- }
因为recv在客户端的死循环中,当服务端断开连接时,recv失效
SOCKET编程:为什么recv不阻塞的更多相关文章
- 基于MFC的socket编程(异步非阻塞通信)
对于许多初学者来说,网络通信程序的开发,普遍的一个现象就是觉得难以入手.许多概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)等,初学者往往迷惑不清, ...
- 【转】【win网络编程】socket中的recv阻塞和select的用法
在编写ftp客户端程序时,在联通后使用recv函数进行接收欢迎信息时,需要申请内存进行接收数据保存,一次读取成功,但是由于一个随机的ftp服务端在说,欢迎信息的大小是不知道的,所以在尝试使用死循环,在 ...
- Linux 网络编程七(非阻塞socket:epoll--select)
阻塞socket --阻塞调用是指调用结果返回之前,当前线程会被挂起.函数只有在得到结果之后才会返回. --对于文件操作 read,fread函数调用会将线程阻塞(平常使用read感觉不出来阻塞, 因 ...
- socket编程里的read和recv函数【转载】
本文转载自:http://blog.163.com/like12@126/blog/static/63023403201291983117551/ 1.read 与 recv 区别 read 原则: ...
- socket编程的同步、异步与阻塞、非阻塞示例详解
socket编程的同步.异步与阻塞.非阻塞示例详解之一 分类: 架构设计与优化 简介图 1. 基本 Linux I/O 模型的简单矩阵 每个 I/O 模型都有自己的使用模式,它们对于特定的应用程序 ...
- socket编程 —— 非阻塞socket (转)---例子已上传至文件中
在上一篇文章 <socket编程——一个简单的例子> http://blog.csdn.net/wind19/archive/2011/01/21/6156339.aspx 中写了一个简单 ...
- socket编程中write、read和send、recv之间的区别~转载
socket编程中write.read和send.recv之间的区别 http://blog.csdn.net/petershina/article/details/7946615 一旦,我们建立 ...
- java socket编程开发简单例子 与 nio非阻塞通道
基本socket编程 1.以下只是简单例子,没有用多线程处理,只能一发一收(由于scan.nextLine()线程会进入等待状态),使用时可以根据具体项目功能进行优化处理 2.以下代码使用了1.8新特 ...
- [转]Socket编程中,阻塞与非阻塞的区别
阻塞:一般的I/O操作可以在新建的流中运用.在服务器回应前它等待客户端发送一个空白的行.当会话结束时,服务器关闭流和客户端socket.如果在队列中没有请示将会出现什么情况呢?那个方法将会等待一个的到 ...
- Socket编程中,阻塞与非阻塞的区别
阻塞:一般的I/O操作可以在新建的流中运用.在服务器回应前它等待客户端发送一个空白的行.当会话结束时,服务器关闭流和客户端socket.如果在队列中没有请示将会出现什么情况呢?那个方法将会等待一个的到 ...
随机推荐
- delphi 数组类型
数组类型 数组类型定义了一组指定类型的元素序列,在方括号中填入下标值就可访问数组中的元素.定义数组时,方括号也用来指定可能的下标值.例如,下面的代码中定义了一个有 24 个整数的数组:type ...
- C++11新特性,利用std::chrono精简传统获取系统时间的方法
一.传统的获取系统时间的方法 传统的C++获取时间的方法须要分平台来定义. 相信百度代码也不少. 我自己写了下,例如以下. const std::string getCurrentSystemTime ...
- [Javascript] Monads
Monads allow you to nest computations. They are a pointed functor that adds mjoin and chain function ...
- innodb_max_dirty_pages_pct与检查点的关系
http://ourmysql.com/archives/310 数据库运行一段时间后,经常导致服务器大量的swap,我怀疑是innodb中的脏数据太多了,因为没有free space了,mysq ...
- mysql 重要维护工具 图解
下载地址: http://maatkit.org/get/mk-query-digest更多信息: http://maatkit.org/ | http://code.google.com/p ...
- 网络IPC:套接字
网络进程间通信(network IPC):不同计算机(通过网络相连)上运行的进程相互通信的机制. 套接字网络IPC接口:进程能够使用该接口和其他进程通信.通过该接口,其他进程运行位置是透明的,它们可以 ...
- C# 之 Int16 Int32 Int64 的区别
Int16 值类型表示值介于 -32768 到 +32767 之间的有符号整数. Int32 值类型表示值介于 -2,147,483,648 到 +2,147,483,647 之间的有符号整数. In ...
- Android进阶笔记16:ListView篇之ListView刷新显示(全局 和 局部)
一.ListView内容变化后,动态刷新的步骤(全局刷新): (1)更新适配器Adapter数据源:(不要使用匿名内部类) (2)调用适配器Adapter的刷新方法notifyDataSetChang ...
- jQuery中利用JSONP解决AJAX跨域问题
写在前面 跨域的解决方案有多种,其中最常见的是使用同一服务器下的代理来获取远端数据,再通过ajax进行读取,而在这期间经过了两次请求过程,使得获取数据的效率大大降低,这篇文章蓝飞就为大家介绍一下解决跨 ...
- DedeCMS更新文章同步发布到新浪微博
如果在网站推广过程中能利用好微博这个工具的话,将会给网站的推广工作带来巨大的便利.下面以dede程序为例讲讲如何将网站内容自动同步到新浪微博. 在新浪微博的工具中有个自动关联博客的功能,利用好这个功能 ...