socket能否定义成数组

西安风影 2009-03-12 11:43:52
SOCKET sockServer,sockClient;
while(1)
{
Addrlen = sizeof(sockaddr_in);
sockClient = accept(sockServer,(struct sockaddr FAR*)&ClientAddr,&Addrlen);
AfxBeginThread(&ThreadProcessClient,(LPVOID)&index);
}
我这样使用没有问题,但是我现在是多个用户连接服务器,所以我想使用socket数组

SOCKET sockServer,sockClient[200];
int index =0;
while(1)
{
Addrlen[index] = sizeof(sockaddr_in);
sockClient[index] = accept(sockServer,(struct sockaddr FAR*)&ClientAddr,&Addrlen[index]);
AfxBeginThread(&ThreadProcessClient,(LPVOID)&index);
index++;
}

但是这样就错误,请问应该如何解决呢?
...全文
294 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ID大头哈哈 2009-03-15
  • 打赏
  • 举报
回复
socket数组是没问题的
它本身就是个指针
没看你贴错误信息
不过应该是没有把Addrlen
定义成动态数组或者用stl的容器
不过我认为这个参数没什么意义
你完全可以丢掉
相反可以定义
vector<SOCKADDR_IN> VClientAddr;
int Addrlen;
sockClient[index] = accept(sockServer,(struct sockaddr FAR*)&ClientAddr,&Addrlen);
VClientAddr.push_back(ClientAddr);
客户端地址还是有用的
coldant 2009-03-14
  • 打赏
  • 举报
回复
Addrlen[index]

index 没初始化的话,是不能使用在数组里的
liuzxchina 2009-03-12
  • 打赏
  • 举报
回复
怎么没有看见listen呢,
cnzdgs 2009-03-12
  • 打赏
  • 举报
回复
AfxBeginThread(&ThreadProcessClient,(LPVOID)&index); // 把&去掉,线程函数中也做相应修改。
Wenxy1 2009-03-12
  • 打赏
  • 举报
回复
用链表更方便。

SOCKET sockServer,sockClient[200];
int index =0;
while(index < 200) /* 这里错了。*/
{
Addrlen[index] = sizeof(sockaddr_in);
sockClient[index] = accept(sockServer,(struct sockaddr FAR*)&ClientAddr,&Addrlen[index]);
AfxBeginThread(&ThreadProcessClient,(LPVOID)&index);
index++;
}
百事烟 2009-03-12
  • 打赏
  • 举报
回复
试试~

u_int sockClient[50];
SOCKET(sockClient[index]) = accept(...);


通常这样用,定义个数据结构...

struct SOCKINFO {
SOCKET Socket; //
char szPort[10];
char szIPAddr[20];
char bufRecv[BUFSIZE];
};

再用数组或链表对数据结构进行操作

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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