社区
网络编程
帖子详情
端口绑定失败,急!!!
zhonglingqqxh
2005-03-25 10:19:51
小弟有一程序需要连续分配大量的端口号,然后创建sokcet,绑定地址和这个端口号,端口号从1024以后的开始的,3000,5000,7000开始都尝试过,但都有绑定不成功的现象出现,但如何总有绑定失败的呢?
...全文
1739
17
打赏
收藏
端口绑定失败,急!!!
小弟有一程序需要连续分配大量的端口号,然后创建sokcet,绑定地址和这个端口号,端口号从1024以后的开始的,3000,5000,7000开始都尝试过,但都有绑定不成功的现象出现,但如何总有绑定失败的呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cimagine
2005-06-08
打赏
举报
回复
用WSAGetLastError()函数,
int err;
if ( bind(......) == SOCKET_ERROR )
{
err = WSAGetLastError(); //这里设断点,查看一下err值就知道了
。
。
。
xtjqu
2005-06-07
打赏
举报
回复
SendInfo sendInfo; for循环的一个周期后就应该失效了(进入thread之后状态不确定)
改为 SendInfo *sendInfo=(SendInfo *)malloc(sizeof(SendInfo);
然后在线程里使用完后后释放,free(sendInfo);
comman_wang
2005-06-07
打赏
举报
回复
如果你要使用大量端口的话,尽量往后。
如:
10289-10989(未分配)
32250-32634(未分配)
48620-49150(未分配)
49151-65535(未分配)
realtom
2005-06-07
打赏
举报
回复
绑定失败后应该调用GetLasterror来看看失败的原因呀,有可能某些端口已经被占用了
Magnus
2005-03-29
打赏
举报
回复
作广告的,你的信誉值怎么这么低啊??
0011411
2005-03-29
打赏
举报
回复
定
daydaymissyou
2005-03-29
打赏
举报
回复
连续的大量端口?不太好.
嗯, 按Caps77(厉兵秣马)说的吧, 哪个能用用哪个.
chinawn
2005-03-29
打赏
举报
回复
做广告的又来了哦
zhonglingqqxh
2005-03-25
打赏
举报
回复
#define SEND_BASE_PORT 9000 //起始分配的端口号
for(int i = 0; i < m_FileInfo.iThreadCount; i++) //循环产生线程,每个线程都要socket绑定
{
SendInfo sendInfo;
sendInfo.iOder = i;
//sendInfo.strname = this->m_strFileName;
memcpy((void *)sendInfo.strname, (void *)(LPCTSTR)m_strFileName, m_strFileName.GetLength());
sendInfo.strname[m_strFileName.GetLength()] = '\0';
if(i == (m_FileInfo.iThreadCount - 1))
sendInfo.lSize = m_FileInfo.lSize - m_lSize * (m_FileInfo.iThreadCount - 1);
else
sendInfo.lSize = m_lSize;
sendInfo.sPort = SEND_BASE_PORT + i; // 每个线程中要绑定的端口号
Sleep(1000);
AfxBeginThread((AFX_THREADPROC)SendFileThread, (LPVOID)&sendInfo);//产生线程
}
UINT SendFileThread(LPVOID pParam)
{
SendInfo * sendInfo = (SendInfo *)pParam;
char * buffer = new char[DATA_BUF];
if(buffer == NULL)
return -1;
SOCKET sock;
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if(sock == INVALID_SOCKET)
return -1;
SOCKADDR_IN saddr;
memset((void *)&saddr, 0, sizeof(SOCKADDR_IN));
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = ADDR_ANY;
saddr.sin_port = htons(sendInfo->sPort);
int iResult = bind(sock, (sockaddr *)&saddr, sizeof(sockaddr)); //绑定
if(iResult == SOCKET_ERROR)
{
AfxMessageBox("bind() 失败!");
return -1;
}
iResult = listen(sock, 5);
if(iResult == SOCKET_ERROR)
{
AfxMessageBox("listen() 失败!");
//WSACleanup();
return -1;
}
SOCKET acceptSock;
SOCKADDR_IN socaddrin;
int nSize = sizeof(SOCKADDR_IN);
acceptSock = accept(sock, (sockaddr *)&socaddrin, &nSize);
if(acceptSock == INVALID_SOCKET)
return -1;
CFile file;
if(file.Open(sendInfo->strname, CFile::modeRead | CFile::shareDenyNone))
{
file.SeekToBegin();
file.Seek(CFile::begin, (sendInfo->iOder - 1)*sendInfo->lSize);
long lsize = sendInfo->lSize;
UINT uSize;
UINT uFinish = 0;
UINT uCurrent = DATA_BUF;
while(uFinish <= lsize)
{
uSize = file.Read((void *)buffer, uCurrent);
if(uSize <= 0)
return -1;
uFinish += uSize;
if((lsize - uFinish) < DATA_BUF)
uCurrent = lsize - uFinish;
//lsize -= uSize;
if(send(acceptSock, (char *)buffer, uSize, 0) <= 0)
return -1;
}
}
file.Close();
delete buffer;
buffer = NULL;
return 0;
}
zhonglingqqxh
2005-03-25
打赏
举报
回复
#define SEND_BASE_PORT 9000 //起始分配的端口号
for(int i = 0; i < m_FileInfo.iThreadCount; i++) //循环产生线程,每个线程都要socket绑定
{
SendInfo sendInfo;
sendInfo.iOder = i;
//sendInfo.strname = this->m_strFileName;
memcpy((void *)sendInfo.strname, (void *)(LPCTSTR)m_strFileName, m_strFileName.GetLength());
sendInfo.strname[m_strFileName.GetLength()] = '\0';
if(i == (m_FileInfo.iThreadCount - 1))
sendInfo.lSize = m_FileInfo.lSize - m_lSize * (m_FileInfo.iThreadCount - 1);
else
sendInfo.lSize = m_lSize;
sendInfo.sPort = SEND_BASE_PORT + i; // 每个线程中要绑定的端口号
Sleep(1000);
AfxBeginThread((AFX_THREADPROC)SendFileThread, (LPVOID)&sendInfo);//产生线程
}
UINT SendFileThread(LPVOID pParam)
{
SendInfo * sendInfo = (SendInfo *)pParam;
char * buffer = new char[DATA_BUF];
if(buffer == NULL)
return -1;
SOCKET sock;
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if(sock == INVALID_SOCKET)
return -1;
SOCKADDR_IN saddr;
memset((void *)&saddr, 0, sizeof(SOCKADDR_IN));
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = ADDR_ANY;
saddr.sin_port = htons(sendInfo->sPort);
int iResult = bind(sock, (sockaddr *)&saddr, sizeof(sockaddr)); //绑定
if(iResult == SOCKET_ERROR)
{
AfxMessageBox("bind() 失败!");
return -1;
}
iResult = listen(sock, 5);
if(iResult == SOCKET_ERROR)
{
AfxMessageBox("listen() 失败!");
//WSACleanup();
return -1;
}
SOCKET acceptSock;
SOCKADDR_IN socaddrin;
int nSize = sizeof(SOCKADDR_IN);
acceptSock = accept(sock, (sockaddr *)&socaddrin, &nSize);
if(acceptSock == INVALID_SOCKET)
return -1;
CFile file;
if(file.Open(sendInfo->strname, CFile::modeRead | CFile::shareDenyNone))
{
file.SeekToBegin();
file.Seek(CFile::begin, (sendInfo->iOder - 1)*sendInfo->lSize);
long lsize = sendInfo->lSize;
UINT uSize;
UINT uFinish = 0;
UINT uCurrent = DATA_BUF;
while(uFinish <= lsize)
{
uSize = file.Read((void *)buffer, uCurrent);
if(uSize <= 0)
return -1;
uFinish += uSize;
if((lsize - uFinish) < DATA_BUF)
uCurrent = lsize - uFinish;
//lsize -= uSize;
if(send(acceptSock, (char *)buffer, uSize, 0) <= 0)
return -1;
}
}
file.Close();
delete buffer;
buffer = NULL;
return 0;
}
Caps77
2005-03-25
打赏
举报
回复
绑定失败就继续绑定下一个端口,直到绑定成功
或者使用setsockopt设置端口重用
xjtuzhw
2005-03-25
打赏
举报
回复
你是在绑定端口还是让机器自己分配的呀
贴出来主要代码看一下
xuzheng318
2005-03-25
打赏
举报
回复
那是不是sokcet写的有问题!
zhonglingqqxh
2005-03-25
打赏
举报
回复
我检查过了,不存在端口冲突的现象啊
sdbtb
2005-03-25
打赏
举报
回复
端口冲突。
ElasticSearch启动时
绑定
端口
失败
本文解决ElasticSearch启动时
绑定
端口
失败
的问题,通过检查network.host配置并使用正确的IP地址,成功启动ElasticSearch服务。
lwip
绑定
端口
失败
调试lwip TCP服务器时遇到
端口
绑定
失败
的问题,原因在于设备尚未通过DHCP获取IP地址。待设备成功获取IP(192.168.1.42)后,
端口
绑定
操作恢复正常。
【Linux网络编程】
端口
绑定
问题
本文深入探讨了网络编程中
端口
绑定
(bind)的概念,解释了为何一个套接字只能
绑定
一个
端口
,并通过测试示例展示了
绑定
过程及
失败
情况。文章强调了服务器端和客户端
端口
绑定
的区别,以及正确
绑定
端口
对于网络通信的重要性。
端口
绑定
失败
的解决办法
当尝试
绑定
一个
端口
但操作
失败
,可能是因为该
端口
被系统预留。可以使用netshinterfaceipv4showexcludedportrangeprotocol=tcp命令来查询被系统预留的TCP
端口
范围,从而找出问题所在。,
解决Linux
绑定
失败
地址已使用(
端口
被占用)的问题
在网络编程开发服务器端应用时,常遇到
端口
被占用导致
绑定
失败
的问题。本文介绍了问题产生的原因,如
端口
被其他程序占用、处于特定状态、未正确关闭套接字等,还给出了排查和解决办法,包括确认
端口
占用、杀掉进程、等待释放、强制重用或换
端口
等。
网络编程
18,357
社区成员
64,165
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章