请教socket问题

kllll1119 2012-08-24 09:41:08

try
{
if(this->Create(port, SOCK_DGRAM))
{
CString str;
str.Format("UDP socket创建端口成功,port:%d\n",port);
MyPrintLog(str);
if(this->Bind(port)!=0)
{
return -1;
}
str.Format("UDP socket绑定端口成功,port:%d\n",port);
MyPrintLog(str);

unsigned long nRecvBuf = 1024 * 10240;
BOOL res = this->SetSockOpt(SO_RCVBUF,(char*)&nRecvBuf,sizeof(nRecvBuf));
res = this->SetSockOpt(SO_SNDBUF,(char*)&nRecvBuf,sizeof(nRecvBuf));

m_port = port;
m_realDataCallback = pDataCallback;
m_realDataUser = dwUserData;
}
else
{
CString str;
str.Format("UDP socket初始化端口失败,port:%d\n",port);
MyPrintLog(str);
return -1;
}
}
catch(...)
{
char* lpMsgBuf;

FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);

CString cErrMsg;
cErrMsg.Format("ErrorMsg:%s\n",lpMsgBuf);
MyPrintLog(cErrMsg);
return -1;
}
...


写了一个udp的DLL,同一程序创建相同端口,第二次后会失败很正常。但是打开多个程序创建同一端口时,后面就会抛出异常,异常信息是,ErrorMsg:类别已存在。
请问是什么原因,怎么解决啊,真心求教!
...全文
99 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangshi061 2012-08-24
  • 打赏
  • 举报
回复
不管你是同一个程序还是多个程序,
创建时只能有一个创建成功,比如 127.0.0.1 :8080
一个端口原则上只能被一个端口所使用,

如果你想实现端口复用, 那么需要驱动级的转发代理,
你这点代码是不够的。
小默 2012-08-24
  • 打赏
  • 举报
回复
一个端口只能打开一个连接
小默 2012-08-24
  • 打赏
  • 举报
回复
一个端口只能打开一个连接
Gloveing 2012-08-24
  • 打赏
  • 举报
回复
select等,实现端口复用

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧