请教socket编程中使用多线程的问题,有简单代码,请高手赐教!

fengfeng1_1 2003-04-16 10:39:10
编译通过,在执行的时候程序出错,请高手帮忙看一下,多谢!是在sockServer.Create(5055);时候出错的。
void CMainFrame::OnFilereceive()
{
HWND hWnd=GetSafeHwnd();
AfxBeginThread(ThreadProc,hWnd,THREAD_PRIORITY_NORMAL);

}


UINT ThreadProc(LPVOID param)
{
AfxSocketInit(NULL);
CSocket sockServer;
sockServer.Create(5055);

sockServer.Listen();
CSocket sockRec;
sockServer.Accept(sockRec);

char buff[256];
CString filename;

CString filepath="e:\\vemsn server\\xmlfiles\\test.xml";


//filepath+=filename;

// filepath+=".xml";

UINT Byte;
sockRec.Receive(&Byte,sizeof(UINT));

CFile destFile(filepath, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);

UINT dwRead = 0;
while(dwRead<Byte)
{
byte* data = new byte[1024];
memset(data,0,1024);

UINT dw=sockRec.Receive(data, 1024);
destFile.Write(data, dw);

dwRead+=dw;
}
destFile.Close();
sockRec.Close();
CSocket sock;
sockServer.Accept(sock);
sock.Receive(buff,256);
filename.Format("%s",buff);
int len=filename.GetLength();
filename=filename.Right(len-18);
int pox=filename.Find(".xml");
//filename=filename.Right(len-18);
filename=filename.Left(pox+4);
CString xmlpath="e:\\vemsn server\\xmlfiles\\";
xmlpath+=filename;
destFile.Rename(filepath,xmlpath);
sock.Close();
CString msg=" 文件接收完毕";
msg=filename+msg;
AfxMessageBox(msg);
return 0;
}
...全文
59 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengzi_zhu 2003-04-19
  • 打赏
  • 举报
回复
其实工作线程也可以启动线程消息队列,具体的看JJHou的WIN32多线程程序技术
fengfeng1_1 2003-04-18
  • 打赏
  • 举报
回复
是在调用CMapPtrtoPtr::GetValueAt()函数时错误,单线程的时候没问题,多线程时才出错!
Bind 2003-04-18
  • 打赏
  • 举报
回复
具体描述一下错误
Fly1980 2003-04-18
  • 打赏
  • 举报
回复
不要用CSocket这个蠢东西, 直接用API吧。
fengfeng1_1 2003-04-18
  • 打赏
  • 举报
回复
老大,可行吗?
为什么在自己编的测试程序里没问题,加到正式程序里就出现异常错误呢?
Bind 2003-04-18
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/1265/1265465.xml?temp=.7457086
hanzp 2003-04-16
  • 打赏
  • 举报
回复
同意big_cobra(眼睛蛇);
用winsock api
在线程中自己处理消息事件
fengfeng1_1 2003-04-16
  • 打赏
  • 举报
回复
有人愿意帮忙吗?!
fengfeng1_1 2003-04-16
  • 打赏
  • 举报
回复
用ftp类传输还是什么呢?!
big_cobra 2003-04-16
  • 打赏
  • 举报
回复
CSocket 类由于有消息发送,所以不能用于工作线程.在线程中调用AfxSocketInit(),不过建议直接使用API.
free_card 2003-04-16
  • 打赏
  • 举报
回复
通过 param传递
fengfeng1_1 2003-04-16
  • 打赏
  • 举报
回复
那应该如何解决呢,请给点意见吧!
shesh 2003-04-16
  • 打赏
  • 举报
回复
CSOCKET放在线程里执行是不安全的,MSDN上有很明确的说明.

18,356

社区成员

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

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