void CWSocketServerDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CSocket serversocket;
if(!(serversocket.Create(6000)))
{
MessageBox("端口创建失败");
}
if(serversocket.Listen())
{
AfxBeginThread(BeginReceive,&serversocket);
}
while(1)
{
;
}
}UINT CWSocketServerDlg::BeginReceive(LPVOID pParam)
{
CSocket* serversocket=(CSocket *)pParam;
CSocket* acceptsocket=new CSocket();
CString str1;
char buf[20];
serversocket->Accept(*acceptsocket);
while(1) //持续性线程函数里总会看到
{
acceptsocket->Receive(buf,20,0);
str1=buf;
str_all+="\r\n";
str_all+=str1;
AfxGetApp()->GetMainWnd()->SetDlgItemText(IDC_EDIT1,str_all);
}
delete acceptsocket; return 0;
}最开始运行线程里accept居然不阻塞等待,直接执行后面while(1)内容,我估计是因为onclick执行完后把传递给线程使用的serversocket释放掉了,于是在onclick后面加了死循环,让他先别结束。但这样做报错。
请问怎么解决才能让serversocket传递后不被onclick释放。
{
// TODO: 在此添加控件通知处理程序代码
CSocket serversocket;
if(!(serversocket.Create(6000)))
{
MessageBox("端口创建失败");
}
if(serversocket.Listen())
{
AfxBeginThread(BeginReceive,&serversocket);
}
while(1)
{
;
}
}UINT CWSocketServerDlg::BeginReceive(LPVOID pParam)
{
CSocket* serversocket=(CSocket *)pParam;
CSocket* acceptsocket=new CSocket();
CString str1;
char buf[20];
serversocket->Accept(*acceptsocket);
while(1) //持续性线程函数里总会看到
{
acceptsocket->Receive(buf,20,0);
str1=buf;
str_all+="\r\n";
str_all+=str1;
AfxGetApp()->GetMainWnd()->SetDlgItemText(IDC_EDIT1,str_all);
}
delete acceptsocket; return 0;
}最开始运行线程里accept居然不阻塞等待,直接执行后面while(1)内容,我估计是因为onclick执行完后把传递给线程使用的serversocket释放掉了,于是在onclick后面加了死循环,让他先别结束。但这样做报错。
请问怎么解决才能让serversocket传递后不被onclick释放。
解决方案 »
- activex调用BC写的动态库
- 讨论一个比较老的问题
- 为什么项目在加载时,出现了问题呢?
- 100分马上放,谁先答出全给他。在线等,关于msflexgrid折行的问题,我设置了setwordwrap但还是不能折行显示。是否还有什么要设置?
- 动态库实例映射问题
- 我想问一下,如何动态的修改 CPropertyPage的标题文字。
- 关于CoUninitialize()的问题。
- 安装vs2010没有Data模组ADO.Net Entity Data Model
- 事情的起因是这样的:我注销了一次我得机器,本来我没有用户密码(指网络用户),直接确定就行了
- 怎么回事??简单的自定义消息怎么会找提示找不到???奇怪
- 怎样来实现服务器的循环接收客户端的连接
- 如何实现按位与的操作?
{
// TODO: 在此添加控件通知处理程序代码
if(!(serversocket.Create(6000)))
{
MessageBox("端口创建失败");
}
if(serversocket.Listen())
{
AfxBeginThread(BeginReceive,&serversocket);
}
}UINT CWSocketServerDlg::BeginReceive(LPVOID pParam)
{
CSocket* acceptsocket=new CSocket();
CString str1; char buf[20];
serversocket.Accept(*acceptsocket);
while(1) //持续性线程函数里总会看到
{
acceptsocket->Receive(buf,20,0);
str1=buf;
str_all+="\r\n";
str_all+=str1;
AfxGetApp()->GetMainWnd()->SetDlgItemText(IDC_EDIT1,str_all);
} delete acceptsocket; return 0;
}
已经改成类变量了,报错,在accept报错