社区
网络编程
帖子详情
请教VC网络高手,实现局域网文件传送功能的思路?
Wenxy1
2003-04-12 07:08:53
类似QQ的局域聊天工具,采用C/S模式,我想实现类似QQ文件传送功能,不过是局域网的,现在我可是做毕业设计呀!请VC网络高手不惜赐教,谢了!
...全文
72
17
打赏
收藏
请教VC网络高手,实现局域网文件传送功能的思路?
类似QQ的局域聊天工具,采用C/S模式,我想实现类似QQ文件传送功能,不过是局域网的,现在我可是做毕业设计呀!请VC网络高手不惜赐教,谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Wenxy1
2003-04-14
打赏
举报
回复
OK,I will to see http://www.vckbase.com/
qrlvls
2003-04-13
打赏
举报
回复
网上东东太多了
到 http://www.vckbase.com/ 看看吧,中文的,应该很多才是
用户 昵称
2003-04-13
打赏
举报
回复
接收
void CNetRecvDlg::OnButton1()
{
CString szIP;
GetDlgItem(IDC_EDIT1)->GetWindowText(szIP);
struct sockaddr_in sin;
WSADATA wsaData;
SOCKET sockClient;
int IpPort;
char *IpAddr;
IpAddr=szIP.GetBuffer(szIP.GetLength());
IpPort=800;
if(WSAStartup(0x0101, &wsaData ))
{
AfxMessageBox("初始化 TCP/IP 协议栈发生错误!");
return;
}
if(wsaData.wVersion != 0x0101)
{
AfxMessageBox("Winsock version is incorrect!");
WSACleanup();
return;
}
if ((sockClient = socket (PF_INET, SOCK_STREAM, IPPROTO_IP)) == INVALID_SOCKET)
{
AfxMessageBox("Create socket error!");
return;
}
sin.sin_family=AF_INET;
sin.sin_addr.s_addr=inet_addr(IpAddr);
sin.sin_port=htons((short)IpPort);
int timeout=300;
int status=setsockopt(sockClient,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout));
if(status)
{
MessageBox("设置超时错误");
WSACleanup();
return ;
}
int buf=10240;
int status2=setsockopt(sockClient,SOL_SOCKET,SO_RCVBUF,(char*)&buf,sizeof(int));
if(status2)
{
MessageBox("设置缓冲区大小错误");
WSACleanup();
return ;
}
if(connect (sockClient, (struct sockaddr *)&sin, sizeof (sin)) == SOCKET_ERROR)
{
MessageBox("连接错误");
closesocket(sockClient);
WSACleanup();
return;
}
else{
WIN32_FIND_DATA fd;
::Sleep(20);
recv(sockClient,(char*)&fd,sizeof(WIN32_FIND_DATA),0);
////////////////////////////////////////////////////////
//PROGRESS
m_Progress.SetRange(0,(short)fd.nFileSizeLow);
m_Progress.SetPos(0);
m_Progress.SetStep(1);
////////////////////////////////////////////////////
CString m_ProDir="e:\\";
CFile destFile(m_ProDir+fd.cFileName, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
UINT dwRead = 0;
while(dwRead<fd.nFileSizeLow)
{
byte* data = new byte[2048];
memset(data,0,2048);
UINT dw=recv(sockClient,(char*)data,2048,0);
destFile.Write(data, dw);
dwRead+=dw;
delete [] data;
m_Progress.StepIt();
}
m_Progress.SetPos((short)fd.nFileSizeLow);
SetFileTime((HANDLE)destFile.m_hFile,&fd.ftCreationTime,
&fd.ftLastAccessTime,&fd.ftLastWriteTime);
SetFileAttributes(m_ProDir+fd.cFileName,fd.dwFileAttributes);
destFile.Close();
closesocket (sockClient);
WSACleanup();
}
}
---------------------
by
回复人: howtotell(天行健,君子以自强不息。) ( ) 信誉:100 2003-3-30 18:09:03 得分:0
用户 昵称
2003-04-13
打赏
举报
回复
发送:
#include "afxmt.h"
CString m_PATH;
DWORD filesize;
HWND hwnd_p;
int IsBegin;
void CNetSendDlg::OnTransfer(CString m_PATH)
{
}
UINT CNetSendDlg::ThreadA(LPVOID pParam)
{
IsBegin=0;
CFile myFile;
if(!myFile.Open(m_PATH, CFile::modeRead | CFile::typeBinary|CFile::shareDenyNone))
{
return 0;
}
CString szIP;
struct sockaddr_in sin;
WSADATA wsaData;
SOCKET sockSrvr,sockRecv;
char *IpAddr;
if(WSAStartup(0x0101, &wsaData ))
{
AfxMessageBox("初始化 TCP/IP 协议栈发生错误!");
return 0;
}
if(wsaData.wVersion != 0x0101)
{
AfxMessageBox("Winsock version is incorrect!");
WSACleanup();
return 0;
}
if ((sockSrvr = socket (PF_INET, SOCK_STREAM, IPPROTO_IP)) == INVALID_SOCKET)
{
AfxMessageBox("Create socket error!");
return 0;
}
if ((sockRecv = socket (PF_INET, SOCK_STREAM, IPPROTO_IP)) == INVALID_SOCKET)
{
AfxMessageBox("Create socket error!");
return 0;
}
//////////////////////////////////////
CString m_addr;
CString m_strT;
CString sNetBiosName;
char hostname[128];
struct hostent *phost;
gethostname(hostname,128);
m_addr = hostname;
phost = gethostbyname(hostname);
int m_iCounter=0;
for(int j = 0;j<4;j++)
{
m_strT.Format("%u", (unsigned int)((unsigned char*)phost->h_addr_list[0])[j]);
sNetBiosName+=m_strT;
if(m_iCounter<3)
{
m_iCounter++;
sNetBiosName+=".";
}
}
//////////////////////////////////////
szIP=sNetBiosName;
IpAddr=szIP.GetBuffer(szIP.GetLength());
sin.sin_family=AF_INET;
sin.sin_addr.s_addr=inet_addr(IpAddr);
sin.sin_port=htons(800);
if(bind(sockSrvr,(sockaddr*)&sin,sizeof(sin))<0)
{
AfxMessageBox("绑定错误");
return 0;
}
listen(sockSrvr,20);
int length=sizeof(sin);
sockRecv=accept(sockSrvr,(struct sockaddr*)&sin,&length);
int timeout=300;
int status=setsockopt(sockRecv,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout));
if(status)
{
AfxMessageBox("设置超时错误");
WSACleanup();
return 0;
}
int buf=10240;
int status2=setsockopt(sockRecv,SOL_SOCKET,SO_RCVBUF,(char*)&buf,sizeof(int));
if(status2)
{
AfxMessageBox("设置缓冲区大小错误");
WSACleanup();
return 0;
}
//////////////////////////////////////////////////////////////////
WIN32_FIND_DATA FindFileData;
FindClose(FindFirstFile(m_PATH,&FindFileData));
send(sockRecv,(char*)&FindFileData,sizeof(WIN32_FIND_DATA),0);
////////////////////////////////////////////////////////
//PROGRESS
filesize=(short)FindFileData.nFileSizeLow;
::PostMessage(hwnd_p,WM_USER_PROG,NULL,NULL);
////////////////////////////////////////////////////
UINT dwRead=0;
byte* data;
while(dwRead<FindFileData.nFileSizeLow)
{
data = new byte[2048];
UINT dw=myFile.Read(data, 2048);
send(sockRecv,(char*)data,2048,0);
dwRead+=dw;
delete [] data;
IsBegin=1;
::PostMessage(hwnd_p,WM_USER_PROG,NULL,NULL);
}
IsBegin=2;
//::PostMessage(hwnd_p,WM_USER_PROG,NULL,NULL);
myFile.Close();
closesocket(sockRecv);
closesocket(sockSrvr);
WSACleanup();
return 0;
}
LRESULT CNetSendDlg::OnProgress(WPARAM wParam, LPARAM lParam)
{
CString st;
st.Format("%d",filesize);
if(IsBegin==0)
{
m_Progress.SetRange(0,(short)filesize/1000);
m_Progress.SetPos(0);
m_Progress.SetStep(1);
}
else if(IsBegin==1)
{
m_Progress.StepIt();
}
else if(IsBegin==2)
{
m_Progress.SetPos((short)filesize/1000);
}
return 0;
}
static char BASED_CODE szFilter[]="|*.*|";
void CNetSendDlg::OnButton1()
{
OPENFILENAME ofn ;
TCHAR szFullName[_MAX_PATH];
::ZeroMemory (&ofn, sizeof(OPENFILENAME)) ;
szFullName[0] = TEXT('\0') ;
ofn.lStructSize = sizeof (OPENFILENAME) ;
ofn.hwndOwner = m_hWnd;
ofn.hInstance = NULL ;
ofn.lpstrFilter = "*.txt\0\0" ;
ofn.lpstrCustomFilter = NULL ;
ofn.nMaxCustFilter = 0 ;
ofn.nFilterIndex = 0 ;
ofn.nMaxFile = MAX_PATH ;
ofn.nMaxFileTitle = MAX_PATH ;
ofn.lpstrInitialDir = "c:\\" ;
ofn.lpstrTitle = "保存到";
ofn.lpstrFile = szFullName ;
ofn.nFileExtension = 0 ;
ofn.lpstrDefExt = TEXT("txt") ;
ofn.lCustData = 0 ;
ofn.lpfnHook = NULL ;
ofn.lpTemplateName = NULL ;
ofn.Flags = OFN_ENABLESIZING | OFN_OVERWRITEPROMPT ;
if(!::GetOpenFileName(&ofn))
return;
GetDlgItem(IDC_EDIT1)->SetWindowText(ofn.lpstrFile);
}
void CNetSendDlg::OnButton2()
{
// m_PATH="c:\\1.jpg";
GetDlgItem(IDC_EDIT1)->GetWindowText(m_PATH);
hwnd_p=this->m_hWnd;
AfxBeginThread(ThreadA,NULL,THREAD_PRIORITY_IDLE);
}
Wenxy1
2003-04-13
打赏
举报
回复
谢谢楼上的朋友们,特别感谢JennyVenus() 。
我正在调试你给的代码。
fbmsf
2003-04-13
打赏
举报
回复
这个我作的很不错了,
讲讲思路吧。
serve 多线程 .....accept 接受.....
client 连接, 发送.....
就可以了。
kite_zeng
2003-04-12
打赏
举报
回复
有很多资料啊,自己去找
listeningboy
2003-04-12
打赏
举报
回复
把文件用字符读出来,送出去,不就可以了。不过就要算好文件大小。
bm1408
2003-04-12
打赏
举报
回复
给介绍本书吧!
tf
2003-04-12
打赏
举报
回复
就用send(),recv()啊,TCP协议吧。
Wenxy1
2003-04-12
打赏
举报
回复
But it is English Web!
Please help me!!!
lwugui
2003-04-12
打赏
举报
回复
www.codeguru.com
lwugui
2003-04-12
打赏
举报
回复
不过很不错
Wenxy1
2003-04-12
打赏
举报
回复
晕,www.codeproject.com是英文网站!
lwugui
2003-04-12
打赏
举报
回复
www.codeproject.com
lizhuohua
2003-04-12
打赏
举报
回复
up
Wenxy1
2003-04-12
打赏
举报
回复
自己顶下帖子!
用
VC
#.NET+OpenGL开发交互式CAD系统
本课程用
VC
#.NET结合OpenGL,从无到有开发一个
功能
较完整的小型交互式CAD系统。作者有交互式CAD系统、动态几何系统开发经验。出版过交互式CAD系统开发方面的图书。课程先讲准备知识,然后讲整个系统的开发
思路
和主要技术,最后将整个系统分成8个版本,从最简单的绘图开始,逐步添加
功能
,循序渐进地进行讲解。知识点讲解细致,系统。课程的核心在于源代码,学习每章内容之前,请先下载本章源码。建议先自行对源码进行阅读分析,然后带着问题去听课,这样学习效率比较高,效果比较好一些。课程最终提供的内容和服务:PPT+源码+视频讲解+持续升级/****课程第一节课为免费课,演示了系统的主要
功能
。可以用手机或电脑观看。如果无法观看,请私信我。谢谢!*****/友情提醒:凭订单信息可找平台客服开具发票。购买系列课程提供打包价,购买讲师卡更划算。
CSDN回帖得分大全(近两年)
√vs2005调用dll的时候Initialize()函数返回错误 [
VC
/MFC 基础类] 40 ylongwu 05-21 20:486 ylongwu06-28 13:42管理√为什么我创建登陆框之后,然后获取登陆框的数据时候总是出现非法操作! [
VC
/MFC 界面] 40 chencheng8095 05-23 00:2911 xianglitian06-10 11:51管理√CFileFind::FindFile 支持通配符么? [
VC
/MFC 基础类] 100 wysbk002 05-22
实用!超强
VC
/MFC 常见问答收集
问 自编浏览器进入一个网页后,点一个链接后系统自动调用用IE打开网页而不是用自身浏览器打开网页。如何让窗口用我自己的浏览器打开? 答 http://www.csdn.net/develop/read_article.asp?id=21702 控制新的窗口 默认情况下,浏览器收到创建新窗口请求时,会在IE中打开新的窗口。你可以处理NewWindow2事件来在自己指定的窗
实用!超强
VC
/MFC 常见问答收集(下)
问:如何在MDI环境下枚举所有打开的窗口? 答:In MFC, each CMDIChildWnd createdby the framework is managed as a child window of the MDIClient window.This MDIClient window is a child of the mainframe window and fi
链接:MSDN UserNet等
Q我想知道如何在
VC
中
实现
可塌陷的PanelBar界面(类似于OutlookBar)? T可塌陷的PanelBar界面比outlookbar更有吸引力,Windows XP左边的导航工具面版就是采用这种风格,采用这种风格的应用程序也越来越多,比如各种杀毒软件,可能delphi提供的
vc
l组件可以简化这种操作,对于这种“傻瓜式”的
实现
我不喜欢。我还是想用C++,
实现
这种界面,而且我不喜欢附带额外的动
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章