首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ socket编程有关问题

2012-09-28 
C++ socket编程问题以下是我代码的形式:bool messageHandler (const Serializable& msg, UINT8 fromDevice

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;
}
程序主要是通过回调函数接受设备数据,然后将数据通过网口进行发送,可能是因为回调函数因为不停循环调用的问题,客户端端口号一直在变,导致下一步处理非常不好处理,请教各位高手有没有更好的方法发送或者怎样修改这段程序,能使端口号固定下来。万分感激!!

[解决办法]

探讨
引用:

你直接在创建地址的时候指定一个固定的端口就可以了呀!不明白你的问题是怎么来的!


哪条语句是指定端口的啊 我没用过socket.. 代码是网上找来的..

[解决办法]
bind
[解决办法]
addrServer.sin_port = htons(guc_Port) ;guc_Port就是端口号,这个固定了,端口号就固定了
[解决办法]
端口号是不变的
[解决办法]
连接一旦建立成功,双方的端口就不会再改变,除非这个socket关闭了,又创建了新的socket。bind指定本地端口,connect是服务器端口,这有源代码请参考,来自《WinSock网络编程经络》,源码下载地址:http://download.csdn.net/detail/geoff08zhang/4571358

热点排行