same
解决方案 »
- 精美MP3播放器
- WTL如何让CSplitterWindow的View响应OnContextMenu
- SDK如何实现:Data Time Picker 同时显示日期和时间?
- 对于用户自定义的控件如何处理他的消息
- 用CSocket怎么连接到www.sina.com.cn?
- 在appwizard里面怎样才能接受键盘输入的字符?急
- 请问这是怎么实现的?
- vc通过对话框修改属性,是关联了哪些代码?
- VC编码 如何获取任务管理器那样获取网络连接的信息???
- 谁能帮我:将4000多行文件切分写入结构链表,但速度太慢。谢谢
- ------------dash()兄请进来拿分-----------
- 紧急!!!! 在线等待!!请高手相助!!!ADO数据库+多线程
sock=socket(AF_INET,SOCK_STREAM,0);
//绑定
if (bind(sock,(sockaddr*)&serv,addlen))
{
m_edit.SetWindowText("绑定错误");
}else
{
//m_list.InsertItem(count++,inet_ntoa(serv.sin_addr));
m_edit.SetWindowText("服务器创建成功");
//开始侦听
listen(sock,5);
//调用线程
AfxBeginThread(thread,0);线程函数如下:
UINT thread(LPVOID p)
{
char buff[100];
CSize size;
size.cx=0;
size.cy=30;
int s=1,msgcount,loop=1,flag=0;
CCSocketDlg *dlg=(CCSocketDlg*)AfxGetApp()->GetMainWnd();
//获得客户端数量
msgcount=dlg->getcount();
if (msgcount==-1)//如果客户端数量达到上限则msgcount=-1
loop=0;
if(loop)
{
s=1;
dlg->msgsock[msgcount]=accept(dlg->sock,(sockaddr*)&(dlg->serv),&(dlg->addlen));//msgsock[msgcount] 一个SOCKET的数组,存放与每个客户端相连的SOCKET
if (dlg->msgsock[msgcount]==INVALID_SOCKET)
{
dlg->m_edit.SetWindowText("Error accept");
}
else
{
//启动线程
AfxBeginThread(thread,0);
dlg->SetForegroundWindow();
dlg->m_list.InsertItem(dlg->count++,"连接成功");
dlg->m_list.InsertItem(dlg->count++,inet_ntoa(dlg->serv.sin_addr));
dlg->m_list.Scroll(size);
dlg->m_button.EnableWindow(TRUE);
while(s!=SOCKET_ERROR)
{
//循环接收数据
s=recv(dlg->msgsock[msgcount],buff,100,0);
dlg->SetForegroundWindow();
if (s!=SOCKET_ERROR)
{
dlg->m_list.InsertItem(dlg->count++,buff);
dlg->m_list.Scroll(size);
dlg->sendtoall(dlg->msgsock[msgcount],buff);
}
} send(dlg->msgsock[msgcount],"Disconnected",100,0);
dlg->m_list.InsertItem(dlg->count++,"Disconnected");
dlg->m_list.Scroll(size);
dlg->msgsock[msgcount]=NULL;
for (int i=0;i<50;i++)
if (dlg->msgsock[i]!=NULL)
flag=1;
if (flag!=1)
dlg->m_button.EnableWindow(FALSE);
closesocket(dlg->msgsock[msgcount]);
}
}
//终止线程
AfxEndThread(0);
return 0;
}
我以前做异步的时候用过数组,但是这种方法真能经的起考验吗?