社区
网络编程
帖子详情
端口绑定失败,急!!!
zhonglingqqxh
2005-03-25 10:19:51
小弟有一程序需要连续分配大量的端口号,然后创建sokcet,绑定地址和这个端口号,端口号从1024以后的开始的,3000,5000,7000开始都尝试过,但都有绑定不成功的现象出现,但如何总有绑定失败的呢?
...全文
1725
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
打赏
举报
回复
端口冲突。
深入解析Redis
端口
绑定
失败
:从“bind: No error”到高效解决方案
本文深入解析Redis
端口
绑定
失败
问题,特别是常见的'bind: No error'错误。从
端口
占用检查到配置文件调整,提供了一系列高效解决方案,包括TCP
端口
绑定
机制解析、Redis服务优化配置及预防措施,帮助开发者快速定位和解决Redis启动问题。
linux
绑定
53DNS
失败
,centos搭建DNS转发服务器不成功,请老师们帮助排错!!!
centos搭建DNS转发服务器不成功,请老师们帮助排错!!!发布时间:2012-08-26 13:28:42来源:红联作者:xdwlb[i=s] 本帖最后由 xdwlb 于 2012-8-26 13:38 编辑 [/i]环境描述:Centos6.3BIND: bind-utils-9.8.2-0.10.rc1.el6_3.2.i686服务器IP:192.168.1.100搭建过程:1、 安装dn...
NioServerSocketChannel的
绑定
源码解析
前面两节课,我们着重分析了 initAndRegister方法,对通讯通道的创建、初始化以及注册到选择器上有了一个详细的介绍,回想JDK NIO的开发步骤,我们需要获取SocketChaennel、获取选择器Selector、将通道注册到选择器、
绑定
端口
、处理事件!那么同样的Netty是基于NIO开发的,也同样少不了这几个步骤,迄今为止,我们已经学习了,Selector的创建、SocketChannel的创建、选择器的注册,今天我们要学的就是通道的
绑定
端口
!欢迎关注公众号【源码学徒】 一、源码入口 我们回到
【故障排查】telnet连接
失败
:
端口
23不可达的深度分析与解决方案
本文深度剖析了telnet连接
失败
,特别是
端口
23不可达的常见原因与系统性解决方案。文章从客户端本地配置、服务器端服务与防火墙、中间网络路径三个层面,提供了详细的排查步骤与命令,并强调了Telnet协议的安全风险,建议使用SSH等更安全的替代方案进行远程管理与
端口
测试。
具身智能专题(2)-LeRobot机械臂USB
端口
绑定
与自动化调试
本文是具身智能专题的第二篇,聚焦LeRobot机械臂的USB
端口
绑定
与自动化调试。针对Linux系统USB
端口
号不固定的痛点,详细讲解了如何通过udev规则为机械臂创建永久固定的
端口
号(如/dev/ttyACM10),这是实现稳定调试和数据采集的“定海神针”。文章还提供了连接测试脚本、校准引导脚本以及自动化流水线搭建的实战方案,旨在大幅提升具身智能项目的开发与调试效率。
网络编程
18,357
社区成员
64,165
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章