linux 空信息,为什么recv()函数收到空消息?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
服务器端程序如下:
#include"stdio.h"
#include"sys/socket.h"
#include"netdb.h"
#define IP "127.0.0.1"
#define PORT 300
int main()
{
char msg[50];
struct sockaddr_in ad;
int s,len,adlen,news;
if((s=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("error!");
}
else
{
printf("Socket Created!\n");
printf("Socket:%d\n",s);
}
bzero(&ad,sizeof(ad));
ad.sin_port=htons(PORT);
ad.sin_addr.s_addr=inet_addr(IP);
ad.sin_family=AF_INET;
len=sizeof(msg);
adlen=sizeof(struct sockaddr_in);
if(bind(s,(struct sockaddr *)&ad,adlen)<0)
printf("error!");
else
printf("Have binded!\n");
if(listen(s,3)<0)
perror("listen");
else
printf("listen.........\n");
if( (news=accept(s,(struct sockaddr *)&ad,&adlen) )<0 )
perror("accept");
else
printf("have accepted!\n");
while(1)
{
bzero(msg,len);
recv(news,msg,len,0);
printf("Receve:%s",msg);
send(news,msg,len,0);
}
}
客户端程序如下:
#include"stdio.h"
#include"sys/socket.h"
#include"netdb.h"
#include"unistd.h"
#define IP "127.0.0.1"
#define PORT 300
int main()
{
char msg[20];
struct sockaddr_in ad;
int s,len,adlen,i=0;
if((s=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("error!");
}
else
printf("Socket Created!\n");
bzero(&ad,sizeof(ad));
ad.sin_port=htons(PORT);
ad.sin_addr.s_addr=inet_addr(IP);
ad.sin_family=AF_INET;
len=sizeof(msg);
adlen=sizeof(struct sockaddr_in);
if(connect(s,(struct sockaddr *)&ad,adlen)<0)
printf("error!");
else
printf("Have Connected!\n");
while(1)
{
bzero(msg,len);
len=read(STDIN_FILENO,msg,sizeof(msg));
send(s,msg,len,0);
recv(s,msg,len,0);
printf("Receve:%s\n",msg);
}
}
问题:为什么客户端向服务器发送字符串时,服务器可以收到。但是客户机只第一次能收到服务器返回的字符串,以后就无法收到服务器返回的字符串?
linux 空信息,为什么recv()函数收到空消息?相关推荐
- linux Socket send与recv函数详解
转自:http://www.cnblogs.com/blankqdb/archive/2012/08/30/2663859.html linux send与recv函数详解 1 #include &l ...
- linux socket中 send recv函数的 flags参数
int send(int s, const void *msg, size_t len, int flags); flags取值有: 0: 与write()无异 MSG_DONTROUTE:告诉内核 ...
- recv函数_第五十二章、send和recv函数
套接字之间一旦建立了连接,那么就可以传送数据了,上一章我们使用的是标准读写函数read和write,这一章我们再来学习另外两个函数recv和send函数. recv和send函数只能用于套接字,还需要 ...
- linux socket recv函数如何判断收完一包_linux服务器端编程之高性能服务器架构设计总结...
所谓高性能就是服务器能流畅地处理各个客户端的连接并尽量低延迟地应答客户端的请求:所谓高并发,指的是服务器可以同时支持多的客户端连接,且这些客户端在连接期间内会不断与服务器有数据来往. 这篇文章将从两个 ...
- c语言网络定向拉取数据,用C模拟了一个http请求,但是recv函数接收的数据不完整且欠安顺序获取信息...
用C模拟了一个http请求,但是recv函数接收的数据不完整且不安顺序获取信息 用C模拟了一个http请求,但是recv函数接收的数据不完整且不安顺序获取信息 我把代码贴上 #include #inc ...
- linux如何判断数组是否为空,Linux fgetcsv取得的数组元素为空字符串的解决方法
Linux fgetcsv取得的数组元素为空字符串的解决方法 但服务器上,很多使用Linux服务器,源程序使用UTF-8,这样很容易产生字符编码的问题. 如果仅仅将CSV文件转码为UTF-8,这样在W ...
- linux内核中send与recv函数详解
Linux send与recv函数详解 1.简介 #include <sys/socket.h> ssize_t recv(int sockfd, void *buff, size_t n ...
- linux send与recv函数详解
linux send与recv函数详解 1 #include <sys/socket.h> 2 ssize_t recv(int sockfd, void *buff, size_t nb ...
- linux uname内核,Linux下confstr与uname函数_获取C库与内核信息
Linux下confstr与uname函数_获取C库与内核信息 #include #include //uname int main(int argc, char **argv[]) { struc ...
最新文章
- java代码。继承。。。很戳我的心啊。。不太懂。super的真正用法
- 这个五月,我拿到了腾讯暑期offer
- Java多线程--使用future进行异步编程
- .net一个函数要用另一个函数的值_MATLAB中的神经网络工具箱(2)函数命令及模型搭建...
- Hive Cilent数据操作
- [IOS地图开发系类]2、位置解码CLGeocoder
- Leetcode刷题(3)整数反转
- Python 数据分析三剑客之 Matplotlib(三):图例 / LaTeX / 刻度 / 子图 / 补丁等基本图像属性
- Maven父子结构的项目依赖使用以及打包依赖_微服务项目(maven父子级项目)怎么打包
- android 65536 gradle,如何防止在Android Gradle中使用Multi-dex
- centos7 mysql8 主从_CentOS7开启MySQL8主从备份、每日定时全量备份(推荐)
- 转:基于AOP实现Ibatis的缓存配置过期策略
- Oracle location,oracle秘境探索之11g tablespace prellocation
- 金蝶显示服务器不是有效,金蝶 服务器不是有效的 请重新设置
- Android开源框架Universal-Image-Loader完全解析(三)
- 暂时初步完成了搜索引擎的基本功能
- ssd1306.py
- cachecloud安装指南
- 姓名拼音首字母缩写_2020年顶级网络安全首字母缩写
- L TEXT和 _T的区别