当前位置: 技术问答>linux和unix
请各位大侠相助,不忘恩情
来源: 互联网 发布时间:2016-11-14
本文导语: 我们做的是一个测试系统, 使用C语言socket将数据从window传输到sunOS_sparc系统下, 传输的是一个结构体(int,char,short,),改变了网络字节序, 在sunOS_sparc端是使用的线程池,当线程池运行起来, 每个线程的循环都要调...
我们做的是一个测试系统,
使用C语言socket将数据从window传输到sunOS_sparc系统下,
传输的是一个结构体(int,char,short,),改变了网络字节序,
在sunOS_sparc端是使用的线程池,当线程池运行起来,
每个线程的循环都要调用从客户端第一次传输来的结构体里的数据,
但是不知道为什么开始没事,但是后来,程序就拿不到结构体的数据了,
拿的那个是个int型数据,测试一会拿到的是168430090,我想问这是为什么?
程序在fedora下是没问题的,但是拿到sunOS_sparc就有这个问题?
或者说我sunOS_sparc结构体安排的不对?
请大侠指教。
结构体:
#define BYTE unsigned char
#define DWORD unsigned int
#define WORD unsigned short
#define FWORD float
typedef struct _RECV_CONFIG_DATA_
{
WORD testType; //功能、性能、容错1
WORD requestSyncflag; //3同异步类型
WORD configSort; //9端口改变标记////判断服务器是否忙
WORD logfileInterval; //log文件保存时间间隔
WORD tpsconfig; //TPS配置
WORD autofalg; //运行模式(自动(1)还是手动(0))
WORD signals; ////测试模式发送0停止1
WORD serverSignal; ////监控模式发送0停止1
WORD filenum; /////发送的文件数量
WORD endfile;
///////////////////////////////////////////
WORD runTmtotal; //10运行的总时间
WORD currunTm; //11当前运行时间
WORD reqSuccessnum; //18请求成功个数
WORD reqFailurenum; //19请求失败个数
WORD successRate; //22成功率
WORD top5Avgcpuuti; //25
WORD top5Avgmemuti; //28
WORD timeoutNum; //超时个数
WORD requestNum;
///////////////////////////////////////////
WORD reqDelaymintm; //4请求最小延时
WORD reqDelaymaxtm; //5请求最大延时
DWORD localPort; //29
DWORD lbsPort;
DWORD localmonitor; //30
DWORD lbsmonitor;
DWORD tpsNum; //12tps数目
DWORD avgRespedelay;
DWORD maxRespedelay; //21最大应答延时
//--------------------
DWORD answerTime; //13应答时间
DWORD curCpuuti; //14当前cpu利用率
DWORD curMemuti; //15当前内存利用率
DWORD maxCpuuti; //16最大CPU利用率
DWORD maxmemuti; //17最大内存利用率
//FWORD avgRespedelay; //20平均应答延时
//FWORD maxRespedelay; //21最大应答延时
DWORD avgCpuuti; //27平均cpu使用率
DWORD avgMemuti; //26平均内存使用率
//--------------------
BYTE localIP[16]; //31
BYTE lbsIP[16]; //32
BYTE starttime[15]; //自动运行开始时间
BYTE endtime[15]; //自动运行结束时间
// FWORD tpsNum; //12tps数目
// FWORD answerTime; //13应答时间
// FWORD curCpuuti; //14当前cpu利用率
// FWORD curMemuti; //15当前内存利用率
// FWORD maxCpuuti; //16最大CPU利用率
// FWORD maxmemuti; //17最大内存利用率
//FWORD avgRespedelay; //20平均应答延时
//FWORD maxRespedelay; //21最大应答延时
// FWORD avgCpuuti; //27平均cpu使用率
// FWORD avgMemuti; //26平均内存使用率
}RECV_CONFIG_DATA,*LPSEND_CONFIG_DATA;
使用C语言socket将数据从window传输到sunOS_sparc系统下,
传输的是一个结构体(int,char,short,),改变了网络字节序,
在sunOS_sparc端是使用的线程池,当线程池运行起来,
每个线程的循环都要调用从客户端第一次传输来的结构体里的数据,
但是不知道为什么开始没事,但是后来,程序就拿不到结构体的数据了,
拿的那个是个int型数据,测试一会拿到的是168430090,我想问这是为什么?
程序在fedora下是没问题的,但是拿到sunOS_sparc就有这个问题?
或者说我sunOS_sparc结构体安排的不对?
请大侠指教。
结构体:
#define BYTE unsigned char
#define DWORD unsigned int
#define WORD unsigned short
#define FWORD float
typedef struct _RECV_CONFIG_DATA_
{
WORD testType; //功能、性能、容错1
WORD requestSyncflag; //3同异步类型
WORD configSort; //9端口改变标记////判断服务器是否忙
WORD logfileInterval; //log文件保存时间间隔
WORD tpsconfig; //TPS配置
WORD autofalg; //运行模式(自动(1)还是手动(0))
WORD signals; ////测试模式发送0停止1
WORD serverSignal; ////监控模式发送0停止1
WORD filenum; /////发送的文件数量
WORD endfile;
///////////////////////////////////////////
WORD runTmtotal; //10运行的总时间
WORD currunTm; //11当前运行时间
WORD reqSuccessnum; //18请求成功个数
WORD reqFailurenum; //19请求失败个数
WORD successRate; //22成功率
WORD top5Avgcpuuti; //25
WORD top5Avgmemuti; //28
WORD timeoutNum; //超时个数
WORD requestNum;
///////////////////////////////////////////
WORD reqDelaymintm; //4请求最小延时
WORD reqDelaymaxtm; //5请求最大延时
DWORD localPort; //29
DWORD lbsPort;
DWORD localmonitor; //30
DWORD lbsmonitor;
DWORD tpsNum; //12tps数目
DWORD avgRespedelay;
DWORD maxRespedelay; //21最大应答延时
//--------------------
DWORD answerTime; //13应答时间
DWORD curCpuuti; //14当前cpu利用率
DWORD curMemuti; //15当前内存利用率
DWORD maxCpuuti; //16最大CPU利用率
DWORD maxmemuti; //17最大内存利用率
//FWORD avgRespedelay; //20平均应答延时
//FWORD maxRespedelay; //21最大应答延时
DWORD avgCpuuti; //27平均cpu使用率
DWORD avgMemuti; //26平均内存使用率
//--------------------
BYTE localIP[16]; //31
BYTE lbsIP[16]; //32
BYTE starttime[15]; //自动运行开始时间
BYTE endtime[15]; //自动运行结束时间
// FWORD tpsNum; //12tps数目
// FWORD answerTime; //13应答时间
// FWORD curCpuuti; //14当前cpu利用率
// FWORD curMemuti; //15当前内存利用率
// FWORD maxCpuuti; //16最大CPU利用率
// FWORD maxmemuti; //17最大内存利用率
//FWORD avgRespedelay; //20平均应答延时
//FWORD maxRespedelay; //21最大应答延时
// FWORD avgCpuuti; //27平均cpu使用率
// FWORD avgMemuti; //26平均内存使用率
}RECV_CONFIG_DATA,*LPSEND_CONFIG_DATA;
|
如果多个线程没有采用同步机制(比如互斥锁)的保护,同时操作一个全局变量,会造成变量的取值混乱
|
1。你在读socket的时候,缓冲区里不一定是一个完整的结构,也许多了,也许不完整。这点是作网络通讯的常识。
2。一个socket绝对不应该用多个线程同时操作!一个socket的缓冲区只有一个(读写各一个),多个线程对一个缓冲区读总会出问题的,这个也应该当了解,否则你的代码就是“玩意”。
2。一个socket绝对不应该用多个线程同时操作!一个socket的缓冲区只有一个(读写各一个),多个线程对一个缓冲区读总会出问题的,这个也应该当了解,否则你的代码就是“玩意”。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。