c语言溢出-c语言在接收网络数据的溢出问题

问题描述

c语言在接收网络数据的溢出问题

代码如下:

 int main() {
            struct sockaddr_in addr, fromAddr;
          int socketd, linkSocketd, num;
          size_t size;

          char readData[1024] = {''};
          addr.sin_family = AF_INET;
          addr.sin_port = htons(9900);
          addr.sin_addr.s_addr = INADDR_ANY;

                socketd = socket(PF_INET, SOCK_STREAM, 0);
        if(socketd == -1) {
                         perror("socket");
                                 return 1;
                }
          if(bind(socketd, (struct sockaddr*)&addr, 16) == -1) {
                perror("bind");
                return 1;
        }
        listen(socketd, 20);
        linkSocketd = accept(socketd, (struct sockaddr*)&addr, &size);
        if(linkSocketd == -1) {
                perror("accept");
                return 1;
        }

                size = sizeof(fromAddr);
        readSize = recvfrom(linkSocketd, (void*)&readData, sizeof(readData), 0, &fromAddr, &size);
        printf("接收到%d字节n", readSize);
        for(num = 0; num <readSize; num++) {
                printf("print_data[%d]:%xn", num, readData[num]);
        }
          return 0;
}

结果:
接收到22字节
print_data[0]:68
print_data[1]:3a
print_data[2]:0
print_data[3]:3a
print_data[4]:0
print_data[5]:68
print_data[6]:ffffffc9
print_data[7]:ffffffff
print_data[8]:ffffffff
print_data[9]:1
print_data[10]:69
print_data[11]:0
print_data[12]:2
print_data[13]:73
print_data[14]:0
print_data[15]:0
print_data[16]:1
print_data[17]:0
print_data[18]:0
print_data[19]:0
print_data[20]:ffffffa7
print_data[21]:16
在第6、7、8、20元素的结果为何会出现这种情况?????

解决方案

char readData[1024] = {''};
修改为
unsigned char readData[1024] = {''};
看看

解决方案二:

你发送数据的代码是啥样的?不知道你发的数据长啥样,咋定位问题?

解决方案三:

上面caozhy回答的应该是正解:

unsigned char uc = 255;
printf("%xn", uc);    // ff

char c = 255;
printf("%xn", c);    // ffffffff
时间: 2024-09-20 11:56:37

c语言溢出-c语言在接收网络数据的溢出问题的相关文章

c语言-C语言网络数据包切片处理

问题描述 C语言网络数据包切片处理 Fragments.pcap是一个用wireshark工具捕捉数据包后的文件,用VC++或Linux的gcc工具实现下面三个任务,该怎么写C语言代码? 1.将IP Fragments.pcap中的分片数据包用程序读取并打印每个分片的offset字段 2.将IP Fragments.pcap中所有分片顺序打乱存为New Fragments.pcap文件 3.设计重组函数将New Fragments.pcap文件中的乱序分组组合成一个IP分组存为IP.pcap文件

c语言-求C语言大牛帮我看看,网络信息安全作业,pe病毒

问题描述 求C语言大牛帮我看看,网络信息安全作业,pe病毒 #include "stdafx.h" #include #include #include #include #include /*条件模块: 功能:搜索病毒文件所在目录中,规定数目的exe文件 //打开符合条件的文件*/ HANDLE OpenHostFile(const WIN32_FIND_DATA *pHost,DWORD *nCount)//WIN32_FIND_DATA = 保存文件的全部属性信息的结构体,DWO

c语言-C语言中怎么用数组接收多个字符串

问题描述 C语言中怎么用数组接收多个字符串 #include int main() { char *colour[5]; colour[0] = "red"; colour[1] = "yellow"; colour[2] = "green"; colour[3] = "blue"; colour[4] = "pink"; return 0; } //请问这种方法对不对? //如果想用键盘输入(scanf)

udp 接收网络日志,导致服务器内存溢出,求解决!!!!!

问题描述 问题说明本人做了一个项目,是对网络日志接收封装上传的一个脚本程序,原来一直运行稳定,近日为了提高网络安全,将系统由win2003平台切换到win2008上.原先一切正常,在win2003接收网络日志时,平均每秒3万条网络日志进行处理,均无任何问题,网络日志的传输方式是udp方式.现已排除,程序无问题,网线无问题,硬件配置无问题,只是在原有的win2003转换为win2008,就出现了,每秒2千条数据都接收不到,直接内存溢出,瘫痪了,整个系统都会很卡.针对win2008的相关设置,也调整

Go语言服务器开发之客户端向服务器发送数据并接收返回数据的方法_Golang

本文实例讲述了Go语言服务器开发之客户端向服务器发送数据并接收返回数据的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package mysocket    import (      "fmt"      "io"      "net"  )    func MySocketBase() {      var (          host   = "www.apache.org"         

《数据科学:R语言实现》——2.7 爬取网络数据

2.7 爬取网络数据 在多数情况下,数据并不会存在于数据库中,相反它们以各种形式遍布于互联网上.为了从这些数据源中挖掘更有价值的信息,我们需要知道如何在网络上访问和爬取数据.这里,我们会介绍如何使用rvest程序包从http://www.bloomberg.com/ 上收集财经数据. 准备工作 在本教程中,你需要给开发环境安装R,同时确保计算机可以访问互联网. 实现步骤 执行下列步骤,从http://www.bloomberg.com/ 爬取数据. 1.首先,访问下列链接,浏览彭博商业上的标普5

如何让R语言通过RODBC库读写数据库的数据

如何让R语言能够读写SQL Server里的数据 一. 安装RODBC库 1.进入R语言的GUI界面(RGUI.EXE),在菜单栏选择"程序包/安装程序包"(如图) 2.在弹出的窗口里往下拉,选择RODBC如图,点击确定 3.在ODBC数据源管理器里将需要的数据库添加进去,这里笔者使用的是SQL Server2008,驱动程序选择Native Client10.0 3.在R语言窗口输入连接语句 > library(RODBC) **这里是载入RODBC库 > channel

C#语言与Java语言程序的比较

迈入二十一世纪以来,信息行业飞速壮大,其中在软件开发中Java语言与C#语言都独当一面,得到了逐步完善和广泛的应用,Java语言和C#语言都是一种面向对象的语言,但Java程序和C#程序还是有一定的区别. 下面分别是两种语言的程序的例子. 1.Java语言的基本程序: Import java.util.*; Package HelloJava{ Public class Message{ Public static void main(String [] args){ System.out.pr

我是菜鸟如何用c语言在.txt文本中读出以下数据

问题描述 我是菜鸟如何用c语言在.txt文本中读出以下数据 如何用c语言在.txt文本中读出以下数据 19650114103100 26.00 98.402.50999 0 19650114172400 25.60 100.003.00999 0 19650115162400 26.80 102.802.90999 0 19650116073100 25.40 99.902.40999 0 19650117024700 29.00 103.303.40999 0 19650118024100 2