请教关于多线阻塞套接字的问题

wyqstc1 2011-01-13 03:41:48
本人现已经实现了单线程的套接字代码如下
SOCKET _socketT;
SOCKADDR_IN _addrT;
char clientNameT[256];
while(1)
{
WSADATA wsadata;
DWORD version = MAKEWORD(2, 0);
int ret = WSAStartup(version, &wsadata);
if(ret != 0)
{
MessageBox(0, "创建网络未成功", 0, MB_OK);
return;
}

if(_socketT != NULL)
{
closesocket(_socketT);
_socketT = NULL;
}

if(_socketT == NULL)
{
_socketT = socket(AF_INET, SOCK_STREAM, 0);
if(_socketT == NULL)
{
MessageBox(0, "套接字创建失败", 0, MB_OK);
return;
}
}

//初始化地址
_addrT.sin_family = AF_INET;
_addrT.sin_addr.S_un.S_addr = INADDR_ANY;
_addrT.sin_port = htons(2350);

ret = bind(_socketT, (LPSOCKADDR)&_addrT, sizeof(_addrT));
if(ret == SOCKET_ERROR)
{
MessageBox(0, "绑定失败", 0 , MB_OK);
return;
}

ret = listen(_socketT, 20);
if(ret == SOCKET_ERROR)
{
MessageBox(0, "监听失败", 0 , MB_OK);
return;
}

SOCKET s = accept(_socketT, 0, 0);
if(s == SOCKET_ERROR)
{
MessageBox(0, "阻塞失败", 0 , MB_OK);
return;
}

char buf[256];
ret = recv(s, buf, 256, 0);
if(s == SOCKET_ERROR)
{
MessageBox(0, "获取数据失败", 0 , MB_OK);
return;
}

//反馈数据
char _tickTime[256];
sprintf(_tickTime, "%d", GetTickCount());
strcat(buf, _tickTime);
send(s, buf, 256, 0);


closesocket(_socketT);


WSACleanup();
}
但是当我使用_beginthread(ThreadSocket,0,0);多个的时候就会出现MessageBox(0, "绑定失败", 0 , MB_OK);请问有些什么方面的功能我没有设置。
...全文
72 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
whyliyi 2011-01-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bluesky12312388 的回复:]

LS两位都不全面,端口是可以被复用的。
setsockopt(...SO_REUSEADDR..),
单就LZ的需求来说,可以新建线程分配其它端口。
[/Quote]
+1
bluesky12312388 2011-01-13
  • 打赏
  • 举报
回复
LS两位都不全面,端口是可以被复用的。
setsockopt(...SO_REUSEADDR..),
单就LZ的需求来说,可以新建线程分配其它端口。
bdmh 2011-01-13
  • 打赏
  • 举报
回复
只能有一个listen端口,如果端口已被占用,其它都连接无效
justkk 2011-01-13
  • 打赏
  • 举报
回复
多个线程不能绑定同一个端口
可以试试在listen()之后,再创建多个线程

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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