一般server这样:
CSocket sockSrvr;
sockSrvr.Create(2004);
sockSrvr.Listen();
CSocket sockRecv;
sockSrvr.Accept(sockRecv);
SOCKET_STREAM_FILE_INFO StreamFileInfo;
WIN32_FIND_DATA FindFileData;
//Dlg.GetPathName()
FindClose(FindFirstFile("aa.txt",&FindFileData));
memset(&StreamFileInfo,0,sizeof(SOCKET_STREAM_FILE_INFO));
strcpy(StreamFileInfo.szFileTitle,myFile.GetFileTitle());
StreamFileInfo.dwFileAttributes =FindFileData.dwFileAttributes;
StreamFileInfo.ftCreationTime =FindFileData.ftCreationTime;
StreamFileInfo.ftLastAccessTime =FindFileData.ftLastAccessTime;
StreamFileInfo.ftLastWriteTime =FindFileData.ftLastWriteTime;
StreamFileInfo.nFileSizeHigh =FindFileData.nFileSizeHigh;
StreamFileInfo.nFileSizeLow =FindFileData.nFileSizeLow;
sockRecv.Send(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO));
UINT dwRead=0;
while(dwRead<StreamFileInfo.nFileSizeLow)
{
byte* data = new byte[1024];
UINT dw=myFile.Read(data, 1024);
sockRecv.Send(data, dw);
dwRead+=dw;
}
myFile.Close();
sockRecv.Close();
一般client这样:
AfxSocketInit(NULL);
CSocket sockClient;
sockClient.Create();
CString szIP;
GetDlgItemText(IDC_EDIT_IPADDRESS,szIP);
if(!sockClient.Connect((LPCTSTR)szIP, 2004))
{
AfxMessageBox("连接到对方机器失败!");
return;
}
SOCKET_STREAM_FILE_INFO StreamFileInfo;
sockClient.Receive(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO));
CFile destFile(StreamFileInfo.szFileTitle, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
UINT dwRead = 0;
while(dwRead<StreamFileInfo.nFileSizeLow)
{
byte* data = new byte[1024];
memset(data,0,1024);
UINT dw=sockClient.Receive(data, 1024);
destFile.Write(data, dw);
dwRead+=dw;
}
SetFileTime((HANDLE)destFile.m_hFile,&StreamFileInfo.ftCreationTime,
&StreamFileInfo.ftLastAccessTime,&StreamFileInfo.ftLastWriteTime);
destFile.Close();
SetFileAttributes(StreamFileInfo.szFileTitle,StreamFileInfo.dwFileAttributes);
sockClient.Close();
AfxMessageBox("接收完毕!");
程序实现的是server端发送数据,client端接收数据!!!将sockRecv实现Receive而sockcleint实现Send 作对调更改后执行不对,为什么?我现在想实现:server端接收数据,而client端发送数据,怎么办?上面的代码如何修改?
CSocket sockSrvr;
sockSrvr.Create(2004);
sockSrvr.Listen();
CSocket sockRecv;
sockSrvr.Accept(sockRecv);
SOCKET_STREAM_FILE_INFO StreamFileInfo;
WIN32_FIND_DATA FindFileData;
//Dlg.GetPathName()
FindClose(FindFirstFile("aa.txt",&FindFileData));
memset(&StreamFileInfo,0,sizeof(SOCKET_STREAM_FILE_INFO));
strcpy(StreamFileInfo.szFileTitle,myFile.GetFileTitle());
StreamFileInfo.dwFileAttributes =FindFileData.dwFileAttributes;
StreamFileInfo.ftCreationTime =FindFileData.ftCreationTime;
StreamFileInfo.ftLastAccessTime =FindFileData.ftLastAccessTime;
StreamFileInfo.ftLastWriteTime =FindFileData.ftLastWriteTime;
StreamFileInfo.nFileSizeHigh =FindFileData.nFileSizeHigh;
StreamFileInfo.nFileSizeLow =FindFileData.nFileSizeLow;
sockRecv.Send(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO));
UINT dwRead=0;
while(dwRead<StreamFileInfo.nFileSizeLow)
{
byte* data = new byte[1024];
UINT dw=myFile.Read(data, 1024);
sockRecv.Send(data, dw);
dwRead+=dw;
}
myFile.Close();
sockRecv.Close();
一般client这样:
AfxSocketInit(NULL);
CSocket sockClient;
sockClient.Create();
CString szIP;
GetDlgItemText(IDC_EDIT_IPADDRESS,szIP);
if(!sockClient.Connect((LPCTSTR)szIP, 2004))
{
AfxMessageBox("连接到对方机器失败!");
return;
}
SOCKET_STREAM_FILE_INFO StreamFileInfo;
sockClient.Receive(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO));
CFile destFile(StreamFileInfo.szFileTitle, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
UINT dwRead = 0;
while(dwRead<StreamFileInfo.nFileSizeLow)
{
byte* data = new byte[1024];
memset(data,0,1024);
UINT dw=sockClient.Receive(data, 1024);
destFile.Write(data, dw);
dwRead+=dw;
}
SetFileTime((HANDLE)destFile.m_hFile,&StreamFileInfo.ftCreationTime,
&StreamFileInfo.ftLastAccessTime,&StreamFileInfo.ftLastWriteTime);
destFile.Close();
SetFileAttributes(StreamFileInfo.szFileTitle,StreamFileInfo.dwFileAttributes);
sockClient.Close();
AfxMessageBox("接收完毕!");
程序实现的是server端发送数据,client端接收数据!!!将sockRecv实现Receive而sockcleint实现Send 作对调更改后执行不对,为什么?我现在想实现:server端接收数据,而client端发送数据,怎么办?上面的代码如何修改?
解决方案 »
- 求"支持手机视频监控制的DVR资料和相关SDK"(在线等)
- VC++技术群,欢迎各面板、菜鸟、老鸟加入。
- 一个很奇怪的问题,
- vc中写了一个对话框程序,运行后,按回车后,程序退出了?怎么控制让程序不退出?
- 关于键盘加速的问题!(郁闷中............)
- 大家平常都用什么软件做HTML帮助啊?
- 在基于dialog的程序中怎么用c++语句来实现与access数据库连接啊?
- 什么情况下WaitForMultipleObjects会返回WAIT_FAILED??
- 1如何用mfc生成及显示非模态对话框。
- 有背景图片的对话框在用 AnimateWindow 时遇到的问题?
- 如何使用midl 安装visual studio是要安装那个工具,谢谢!!!
- 简单问题:绝对物超所值》》。。。
服务器和客户端处于死锁状态,服务器端用多线程实现发送和 接收同时进行应该怎样做呢?谢谢!
然后AfxBeginThread()或CreateThread()
仅实现简单的client发送,server接收就可,上面的程序怎么样修改呢?谢谢!
if(!AfxSocketInit())
{
AfxMessageBox("WindowsSocket initial failed!");
return 1;
}
CSocket ChatRecieve;
if(!ChatRecieve.Create())
{
AfxMessageBox("ReceiveSocket create failed!");
return 1;
}
else
{
ChatRecieve.Connect(pL2Info->ipL2Address,pL2Info->iL2Port);
}
ChatRecieve.ReceiveFrom(&pL2Info->pCommData,8096,pL2Info->ipL2Address,pL2Info->iL2Port);
ChatRecieve.Close();