我正在编写一个客户端,以使用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()成功,但缓冲区未更改且为空相关推荐

  1. Kali linux 学习笔记(十九)缓冲区溢出——linux(crossfire) 2020.3.1

    前言 上一篇在windows下用SLMail的漏洞实现缓冲区溢出 这次在Linux下用crossfire的漏洞实现缓冲区溢出 crossfire穿越火线 多人在线rpg游戏 1.9.0版本接受入站so ...

  2. linux脚本登录启动失败,在Linux上检查用户登录成功与失败的shell脚本

    在Linux上检查用户登录成功与失败的shell脚本 Linux管理员的典型任务之一是检查Linux系统中成功和失败的登录尝试. 手动验证它们非常困难,因为" /var/log/secure ...

  3. Linux shell脚本执行后出现语法错误: 未预期的文件结尾

    Windows环境下编写了一个shell脚本,上传到Linux环境中执行,Linux shell脚本执行后出现 语法错误: 未预期的文件结尾. 出现了此错误提示,进行了如下的检查:1.检查Shell脚 ...

  4. linux使用flock文件锁解决脚本周期内未执行完重复执行

    linux使用flock文件锁解决脚本周期内未执行完重复执行 关于flock flock 是对于整个文件的建议性锁.也就是说,如果一个进程在一个文件(inode)上放了锁,那么其它进程是可以知道的.( ...

  5. Linux fs清理文件,linux找出已经删除但磁盘空间未释放的大文件并清空

    linux找出已经删除但磁盘空间未释放的大文件并清空 1.找出已经删除但磁盘空间未释放的文件 如果文件已经删除,但实际的磁盘空间未释放,这个时候文件句柄fd相关信息还在内存中,可以通过lsof命令找出 ...

  6. linux共享库位置配置(LD_LIBRARY_PATH环境变量 或者 更改/etc/ld.so.conf)

    linux共享库位置配置(LD_LIBRARY_PATH环境变量 或者 更改/etc/ld.so.conf) 转载于:https://www.cnblogs.com/RichardLee/archiv ...

  7. mysql数据库插入数据为空_插入数据成功,但是数据库中显示为空(菜鸟提问)...

    插入数据成功,但是数据库中显示为空(初学者提问). 这个问题很菜,实在是找不到办法. 为什么往数据库中插入数据显示成功,但是数据库中显示是空. +------+------+ |   name   | ...

  8. 系统中有多个生产者进程和多个消费者进程,共享一个能存放1000件产品的环形缓冲区(初始为空)。当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;

    系统中有多个生产者进程和多个消费者进程,共享一个能存放1000件产品的环形缓冲区(初始为空).当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待:当缓冲区未空时,消费者进程可以从缓冲区取走一 ...

  9. 最土团购支付成功但显示未付款

    模版切断 ${mb_strimwidth($one['title'],0,86,'...')} <!--{if trim(strip_tags($team['userreview']))}--& ...

最新文章

  1. dataframe,python,numpy 问题索引2
  2. kubernetes 动态扩容pv
  3. 深入浅出python机器学习_9.1.5_通过数据预处理提高模型的准确率_MinMaxScaler
  4. macOS 环境安装Flutter
  5. LVS-NAT搭建HTTP及HTTPS
  6. 【bzoj1212】[HNOI2004]L语言 AC自动机
  7. SAP CDS view权限控制实现原理介绍
  8. 基于vue的video播放组件
  9. 计算机维保资质,电脑维保属于技术合同吗?
  10. iperf3怎么看结果_iperf3命令使用
  11. 区块链技术指南学习(一)未来已来
  12. Android 获取时间戳
  13. ios备忘录下载安卓版_如何下载和平精英国际服?
  14. guava LoadingCache 的用法
  15. 专业字体设计编辑Glyphs 3
  16. WPF的Prism框架简介
  17. html设置文本域的,HTML-文本域属性设置
  18. ENFI下载器地址——百度网盘不限速下载工具
  19. 在VSCode中配置并调试R语言.r文件
  20. H323加载H264插件时出现找不到dll文件问题解决

热门文章

  1. python爬虫获取url_Python爬虫如何获取页面内所有URL链接?本文详解
  2. oracle data guard闪回,11gR2 Active Data Guard 闪回 - flashback database / snapshot standby - 2
  3. php去掉编辑器自带样式,phpcms去掉CKEditor编辑器上传图片的宽高样式
  4. java 自旋方法_JAVA循环使用CAS实现自旋操作
  5. php 正则表达式提取出合法的时间_PHP正则表达式核心技术完全详解 第1节
  6. 中关村windows11 32位专业版镜像v2021.07
  7. 手机QQ浏览器如何同时下载多个文件
  8. 方法区元空间实现之jdk7和8字符串常量池、运行时常量池、静态变量到底在哪?
  9. easyPOI基本用法详解
  10. java中下拉框select和单选按钮的回显操作