读书人

C++ socket编程有关问题

发布时间: 2012-09-28 00:03:35 作者: rapoo

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

读书人网 >C++

热点推荐