首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 其他服务器 >

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

2012-04-07 
请各位大侠相助,不忘恩情我们做的是一个测试系统,使用C语言socket将数据从window传输到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;

[解决办法]
如果多个线程没有采用同步机制(比如互斥锁)的保护,同时操作一个全局变量,会造成变量的取值混乱
[解决办法]
1。你在读socket的时候,缓冲区里不一定是一个完整的结构,也许多了,也许不完整。这点是作网络通讯的常识。
2。一个socket绝对不应该用多个线程同时操作!一个socket的缓冲区只有一个(读写各一个),多个线程对一个缓冲区读总会出问题的,这个也应该当了解,否则你的代码就是“玩意”。

热点排行