社区
网络编程
帖子详情
端口绑定失败,急!!!
zhonglingqqxh
2005-03-25 10:19:51
小弟有一程序需要连续分配大量的端口号,然后创建sokcet,绑定地址和这个端口号,端口号从1024以后的开始的,3000,5000,7000开始都尝试过,但都有绑定不成功的现象出现,但如何总有绑定失败的呢?
...全文
1648
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
打赏
举报
回复
端口冲突。
CCNA_CCNP 思科网络认证 PAT NAT
端口
或地址转换 与端
Re:CCNA_CCNP 思科网络认证 PAT NAT
端口
或地址转换 与
端口
映射 ====================== # 本章课程大纲 公网地址和私网地址 NAT应用场景 ...
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.rc...
NioServerSocketChannel的
绑定
源码解析
那么同样的Netty是基于NIO开发的,也同样少不了这几个步骤,迄今为止,我们已经学习了,Selector的创建、SocketChannel的创建、选择器的注册,今天我们要学的就是通道的
绑定
端口
!欢迎关注公众号【源码学徒】 一、...
dpdk网卡
绑定
再添加一块网卡,这时别
急
,先不启动虚拟机;我们还需要去修改一下当前虚拟机的配置文件, 我的配置文件时在E:\Users\adm\Documents\Virtual Machines\Red Hat Enterprise Linux 5\Red Hat 6.vmx 你在安装虚拟机时...
AndroidStuido连接不上手机的解决方法 !
我们的AndroidStuido,虽然可以说是一个相当好用的...不过遇到这种情况的时候,莫要捉
急
,首先我们来检查
端口
是否能被
绑定
1. 按下Win+R , 打开cmd命令行 2. 输入 : adb nodaemon server 3. 如果提示cannot bind 'tc...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章