linux read recv,read()/ recv()成功,但缓冲区未更改且为空
我正在编写一个客户端,以使用LINUX上的C脚本读取TCP下通过套接字从服务器发送回的数据。
该服务器永远运行,我验证是否可以得到答复netcat localhost [PORT_NUMBER]。使用以下命令检查时,服务器处于LISTEN状态netstat -nap
recv()函数返回预期的字节数,但是buffer变空并且strlen(buffer)为0。我还尝试更改为read(),这没想到会有不同的结果,并且显示了相同的问题。
这是代码。
#include
#include //strlen
#include
#include //inet_addr
#include
#include
int main(int argc, char *argv[])
{
int socket_desc, msg_rep_size = 1200, msg_size = 100;
struct sockaddr_in server;
char message[msg_size], server_reply[msg_rep_size];
//Create socket
socket_desc = socket(AF_INET, SOCK_STREAM, 0);
if (socket_desc == -1)
{
printf("Could not create socket");
}
server.sin_addr.s_addr = inet_addr("0.0.0.0");
server.sin_family = AF_INET;
server.sin_port = htons(31114); // PORT_NUMBER
//Connect to remote server
if (connect(socket_desc, (struct sockaddr *)&server, sizeof(server)) < 0)
{
printf("connect error");
return 1;
}
printf("Connected");
while (1)
{
// send some data
bzero(message, msg_size);
strncpy(message, "REQUEST\n", msg_size);
if (send(socket_desc, message, msg_size, 0) < 0)
{
printf("Send failed");
return 1;
}
printf("Data Send\n");
// Receive a reply from the server
bzero(server_reply, msg_rep_size);
int read_result = recv(socket_desc, server_reply, msg_rep_size, 0);
if (read_result < 0)
{
printf("Receive failed\n");
return 1;
}
else
{
printf("Reply received\n");
printf("read_result: %d\n", read_result);
printf("strlen(server_reply): %d\n", (int)strlen(server_reply));
printf("Reply: %s\n", server_reply);
}
usleep(8);
}
return 0;
}
如果我从
int read_result = recv(socket_desc, server_reply, msg_rep_size, 0);
至
int read_result = read(socket_desc, server_reply, msg_rep_size);
感谢您的帮助。我是套接字编程的新手,无法跟踪发生了什么。
PS。答复的预期字节大小为1108,这是正确的。我打算将最大大小设为1200,以确认接收到正确的字节数。
PS2。也请随时对低级c的编码风格进行评论。
linux read recv,read()/ recv()成功,但缓冲区未更改且为空相关推荐
- Kali linux 学习笔记(十九)缓冲区溢出——linux(crossfire) 2020.3.1
前言 上一篇在windows下用SLMail的漏洞实现缓冲区溢出 这次在Linux下用crossfire的漏洞实现缓冲区溢出 crossfire穿越火线 多人在线rpg游戏 1.9.0版本接受入站so ...
- linux脚本登录启动失败,在Linux上检查用户登录成功与失败的shell脚本
在Linux上检查用户登录成功与失败的shell脚本 Linux管理员的典型任务之一是检查Linux系统中成功和失败的登录尝试. 手动验证它们非常困难,因为" /var/log/secure ...
- Linux shell脚本执行后出现语法错误: 未预期的文件结尾
Windows环境下编写了一个shell脚本,上传到Linux环境中执行,Linux shell脚本执行后出现 语法错误: 未预期的文件结尾. 出现了此错误提示,进行了如下的检查:1.检查Shell脚 ...
- linux使用flock文件锁解决脚本周期内未执行完重复执行
linux使用flock文件锁解决脚本周期内未执行完重复执行 关于flock flock 是对于整个文件的建议性锁.也就是说,如果一个进程在一个文件(inode)上放了锁,那么其它进程是可以知道的.( ...
- Linux fs清理文件,linux找出已经删除但磁盘空间未释放的大文件并清空
linux找出已经删除但磁盘空间未释放的大文件并清空 1.找出已经删除但磁盘空间未释放的文件 如果文件已经删除,但实际的磁盘空间未释放,这个时候文件句柄fd相关信息还在内存中,可以通过lsof命令找出 ...
- linux共享库位置配置(LD_LIBRARY_PATH环境变量 或者 更改/etc/ld.so.conf)
linux共享库位置配置(LD_LIBRARY_PATH环境变量 或者 更改/etc/ld.so.conf) 转载于:https://www.cnblogs.com/RichardLee/archiv ...
- mysql数据库插入数据为空_插入数据成功,但是数据库中显示为空(菜鸟提问)...
插入数据成功,但是数据库中显示为空(初学者提问). 这个问题很菜,实在是找不到办法. 为什么往数据库中插入数据显示成功,但是数据库中显示是空. +------+------+ | name | ...
- 系统中有多个生产者进程和多个消费者进程,共享一个能存放1000件产品的环形缓冲区(初始为空)。当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;
系统中有多个生产者进程和多个消费者进程,共享一个能存放1000件产品的环形缓冲区(初始为空).当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待:当缓冲区未空时,消费者进程可以从缓冲区取走一 ...
- 最土团购支付成功但显示未付款
模版切断 ${mb_strimwidth($one['title'],0,86,'...')} <!--{if trim(strip_tags($team['userreview']))}--& ...
最新文章
- dataframe,python,numpy 问题索引2
- kubernetes 动态扩容pv
- 深入浅出python机器学习_9.1.5_通过数据预处理提高模型的准确率_MinMaxScaler
- macOS 环境安装Flutter
- LVS-NAT搭建HTTP及HTTPS
- 【bzoj1212】[HNOI2004]L语言 AC自动机
- SAP CDS view权限控制实现原理介绍
- 基于vue的video播放组件
- 计算机维保资质,电脑维保属于技术合同吗?
- iperf3怎么看结果_iperf3命令使用
- 区块链技术指南学习(一)未来已来
- Android 获取时间戳
- ios备忘录下载安卓版_如何下载和平精英国际服?
- guava LoadingCache 的用法
- 专业字体设计编辑Glyphs 3
- WPF的Prism框架简介
- html设置文本域的,HTML-文本域属性设置
- ENFI下载器地址——百度网盘不限速下载工具
- 在VSCode中配置并调试R语言.r文件
- H323加载H264插件时出现找不到dll文件问题解决
热门文章
- python爬虫获取url_Python爬虫如何获取页面内所有URL链接?本文详解
- oracle data guard闪回,11gR2 Active Data Guard 闪回 - flashback database / snapshot standby - 2
- php去掉编辑器自带样式,phpcms去掉CKEditor编辑器上传图片的宽高样式
- java 自旋方法_JAVA循环使用CAS实现自旋操作
- php 正则表达式提取出合法的时间_PHP正则表达式核心技术完全详解 第1节
- 中关村windows11 32位专业版镜像v2021.07
- 手机QQ浏览器如何同时下载多个文件
- 方法区元空间实现之jdk7和8字符串常量池、运行时常量池、静态变量到底在哪?
- easyPOI基本用法详解
- java中下拉框select和单选按钮的回显操作