专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Solaris

请各位大侠相助,不忘恩情解决办法

发布时间:2011-06-27 19:16:17 文章来源:www.iduyao.cn 采编人员:星星草
请各位大侠相助,不忘恩情
我们做的是一个测试系统,
使用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的缓冲区只有一个(读写各一个),多个线程对一个缓冲区读总会出问题的,这个也应该当了解,否则你的代码就是“玩意”。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: