C++ socket编程问题
以下是我代码的形式:
bool messageHandler (const Serializable& msg, UINT8 fromDeviceID)
{
unsigned int id;
float dist;
switch (msg.getDataType())
{
case ibeo::DataTypeObjectList:
{
// 合成套接字版本.
WORD wVersionRequested = MAKEWORD(2, 0) ;
WSADATA wsaData ;
// 加载套接字库版本.
if (WSAStartup(wVersionRequested, &wsaData) != 0)
{
return 0 ;
}
if (LOBYTE(wsaData.wVersion) != 2 ||
HIBYTE(wsaData.wVersion) != 0)
{
WSACleanup() ;
return 0 ;
}
// 创建套接字.
SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0) ;
// 向服务器发出连接请求.
SOCKADDR_IN addrServer ;
addrServer.sin_addr.S_un.S_addr = inet_addr("192.168.0.8") ;
addrServer.sin_family = AF_INET ;
addrServer.sin_port = htons(guc_Port) ;
connect(sockClient, reinterpret_cast<SOCKADDR *> (&addrServer), sizeof(addrServer)) ;
const ObjectList& objectList = dynamic_cast<const ObjectList&>(msg);
std::vector<Object>::const_iterator obj=objectList.begin();
for(;obj!=objectList.end();++obj)
{
id=obj->getObjectId();
dist=obj->getCenterPoint().dist();
std::cout<<"id is "<<id<<", dist is " <<dist<<"/n";
//struct data dataSendToServer = {id, dist};
// 向服务器发送数据.
//send(sockClient, reinterpret_cast<char *> (&dataSendToServer), sizeof (dataSendToServer), 0) ;
}
// 关闭套接字.
//closesocket(sockClient) ;
//WSACleanup() ;
//std ::cin.get() ;
}
std::cout<<std::endl;
break;
default:
break;
}
return true;
}
// ////////////////////////////////////////////////////////////
int main (void)
{
.......
myManager.getSerializer().registerMessageHandler (messageHandler,
ibeo::DataTypeFilter::allTypes());
bool keep_running = true;
// Now run the devices so that they emit data
myManager.runDevices();
while (keep_running)
{
sleep(boost::posix_time::seconds(1));
}
return 0;
}
程序主要是通过回调函数接受设备数据,然后将数据通过网口进行发送,可能是因为回调函数因为不停循环调用的问题,客户端端口号一直在变,导致下一步处理非常不好处理,请教各位高手有没有更好的方法发送或者怎样修改这段程序,能使端口号固定下来。万分感激!!
[解决办法]