社区
网络及通讯开发
帖子详情
如何使两台通过主机上网的局域网内的电脑互传文件
yangengchao
2002-10-24 10:40:24
因为两台机只有局域网IP,如何使两台通过主机上网的局域网内的电脑互传文件?
...全文
252
3
打赏
收藏
如何使两台通过主机上网的局域网内的电脑互传文件
因为两台机只有局域网IP,如何使两台通过主机上网的局域网内的电脑互传文件?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wyb_45
2002-11-01
打赏
举报
回复
刚才给别人帖了一些,代码比较长,就不帖了。
可以使用copyfile,不过得相互访问。
使用自己的软件是
http://expert.csdn.net/Expert/topic/1117/1117958.xml?temp=.1450159
里面有我恢复的内容。
iec
2002-11-01
打赏
举报
回复
//---------------------------------------------------------------------------
Client.cpp
//---------------------------------------------------------------------------
// CLIENT端
#include <vcl.h>
#include <winsock.h>
#define BUFFSIZE 1024
#pragma hdrstop
#include "Client.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
WSADATA wsa;
SOCKET sck;
SOCKADDR_IN tto;
hostent *host;
fd_set FdRead;
int port=926,ret,i;
DWORD dwRead;
//---------------------------------------------------------------------------
DWORD WINAPI ReadClient(LPVOID lParam)
{
HANDLE hFile;
DWORD dwWrite,dwFileSize;
TCHAR szFileName[MAX_PATH];
TCHAR szBuff[BUFFSIZE];
FD_ZERO(&FdRead);
FD_SET(sck,&FdRead);
while(TRUE)
{
ret=select(0,&FdRead,NULL,NULL,NULL);
if(ret==SOCKET_ERROR)
{
closesocket(sck);
return FALSE;
}
else if(FD_ISSET(sck,&FdRead))
{
ZeroMemory(szBuff,sizeof(szBuff));
if((dwFileSize=recv(sck,szBuff,BUFFSIZE,0))==SOCKET_ERROR)
{
closesocket(sck);
CloseHandle(hFile);
return FALSE;
}
else if((strncmp(szBuff,"DOWNFILE_",lstrlen("DOWNFILE_")))==0)
{
wsprintf(szFileName,"c:\\%s",szBuff);
hFile=CreateFile(szFileName,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,
NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL|
FILE_ATTRIBUTE_ARCHIVE,(HANDLE)NULL);
if(hFile==INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"Cli Open File Error",NULL,MB_OK);
return FALSE;
}
ZeroMemory(szBuff,sizeof(szBuff));
}
else
WriteFile(hFile,szBuff,dwFileSize,&dwWrite,NULL);
}
}
return TRUE;
}
// WriteClient
// 发送文件数据线程,每次预读1K数据,根据实际读取发送,直到读取数据小于1K
//---------------------------------------------------------------------------
DWORD WINAPI WriteClient(LPVOID szFileName)
{
HANDLE hFile;
DWORD dwRead,dwNdx;
BOOL bRet;
TCHAR szFileBuff[BUFFSIZE],szSend[MAX_PATH];
wsprintf(szSend,"UPFILE_%s",ExtractFileName((LPCTSTR)szFileName).c_str());
send(sck,szSend,lstrlen(szSend),0);
hFile=CreateFile((LPCTSTR)szFileName,GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL|
FILE_ATTRIBUTE_ARCHIVE,(HANDLE)NULL);
if(hFile==INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"Open File Error",NULL,MB_OK);
ExitProcess(0);
}
do
{
bRet=ReadFile(hFile,szFileBuff,BUFFSIZE,&dwRead,NULL);
if(bRet==FALSE)
{
MessageBox(NULL,"Read Buf ERROR!",NULL,MB_OK);
break;
}
else if(dwRead==0)
{
MessageBox(NULL,"File EOF!",NULL,MB_OK);
break;
}
else
{
send(sck,szFileBuff,dwRead,0);
}
}while(dwRead==BUFFSIZE);
CloseHandle(hFile);
return TRUE;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HANDLE hThread;
DWORD dwTid;
WSAStartup(MAKEWORD(1,1),&wsa);
sck=socket(AF_INET,SOCK_STREAM,0);
if(sck==INVALID_SOCKET)
{
ShowMessage("Could not create a sock");
ExitProcess(0);
}
else
{
host=gethostbyname(Edit1->Text.c_str());
tto.sin_family=AF_INET;
tto.sin_port=htons(port);
CopyMemory(&tto.sin_addr,host->h_addr,host->h_length);
if((connect(sck,(struct sockaddr FAR *)&tto,sizeof(tto))==SOCKET_ERROR))
{
ShowMessage("connect error!");
closesocket(sck);
}
else
{
hThread=CreateThread(NULL,0,ReadClient,(LPVOID)0,0,&dwTid);
CloseHandle(hThread);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
HANDLE hThread;
DWORD dwTid;
if(OpenDialog1->Execute())
{
hThread=CreateThread(NULL,0,WriteClient,(LPVOID)OpenDialog1->FileName.c_str(),0,&dwTid);
CloseHandle(hThread);
}
iec
2002-11-01
打赏
举报
回复
用下面代码可以实现你的要求;自己再看看tcp/ip协议 以及传输机制和 windows socketapi函数解释,绝对精通socket编程
Server.cpp
//---------------------------------------------------------------------------
// SERVER端
#include <vcl.h>
#include <winsock.h>
#define BUFFSIZE 1024
#pragma hdrstop
#include "Server.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
WSADATA wsaData;
SOCKET sck,sc;
SOCKADDR_IN to,client;
BOOL flag=TRUE;
int iAddrSize,ret,ret_no,i=0;
TCHAR szBuf[BUFFSIZE];
fd_set FdRead;
//---------------------------------------------------------------------------
// ReadClient
//---------------------------------------------------------------------------
DWORD WINAPI ReadClient(LPVOID lPort)
{
HANDLE hFile=NULL;
DWORD dwWrite,dwFileSize;
TCHAR szFileName[MAX_PATH];
FD_ZERO(&FdRead);
FD_SET(sck,&FdRead);
while(TRUE)
{
ret_no=select(0,&FdRead,NULL,NULL,NULL);
if(ret_no==SOCKET_ERROR)
{
closesocket(sck);
return FALSE;
}
if(FD_ISSET(sck,&FdRead))
{
iAddrSize=sizeof(client);
sc=accept(sck,(SOCKADDR *)&client,&iAddrSize);
if(sc==INVALID_SOCKET)
{
MessageBox(NULL,"accept error",NULL,MB_OK);
closesocket(sc);
WSACleanup();
}
getpeername(sck,(SOCKADDR *)&client,&iAddrSize);
ShowMessage(inet_ntoa(client.sin_addr));
FD_SET(sc,&FdRead);
}
if(FD_ISSET(sc,&FdRead))
{
ZeroMemory(szBuf,sizeof(szBuf));
if((dwFileSize=recv(sc,szBuf,BUFFSIZE,0))==SOCKET_ERROR)
{
closesocket(sc);
CloseHandle(hFile);
return FALSE;
}
else if((strncmp(szBuf,"UPFILE_",lstrlen("UPFILE_")))==0)
{
wsprintf(szFileName,"c:\\%s",szBuf);
hFile=CreateFile(szFileName,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,
NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL|
FILE_ATTRIBUTE_ARCHIVE,(HANDLE)NULL);
if(hFile==INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"Server Open File Error",NULL,MB_OK);
return FALSE;
}
ZeroMemory(szBuf,sizeof(szBuf));
}
else
WriteFile(hFile,szBuf,dwFileSize,&dwWrite,NULL);
}
}
CloseHandle(hFile);
return TRUE;
}
//---------------------------------------------------------------------------
// WriteClient
//---------------------------------------------------------------------------
DWORD WINAPI WriteClient(LPVOID szFileName)
{
HANDLE hFile;
DWORD dwRead,dwNdx;
BOOL bRet;
TCHAR szFileBuff[BUFFSIZE],szSend[MAX_PATH];
wsprintf(szSend,"DOWNFILE_%s",ExtractFileName((LPCTSTR)szFileName).c_str());
send(sc,szSend,lstrlen(szSend),0);
hFile=CreateFile((LPCTSTR)szFileName,GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL|
FILE_ATTRIBUTE_ARCHIVE,(HANDLE)NULL);
if(hFile==INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"Open File Error",NULL,MB_OK);
ExitProcess(0);
}
do
{
bRet=ReadFile(hFile,szFileBuff,BUFFSIZE,&dwRead,NULL);
if(bRet==FALSE)
{
MessageBox(NULL,"Read Buf ERROR!",NULL,MB_OK);
break;
}
else if(dwRead==0)
{
MessageBox(NULL,"File EOF!",NULL,MB_OK);
break;
}
else
{
send(sc,szFileBuff,dwRead,0);
}
}while(dwRead==BUFFSIZE);
CloseHandle(hFile);
return TRUE;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
HANDLE hThread;
DWORD dwTid;
if(WSAStartup(MAKEWORD(1,1),&wsaData)!=NULL)
{
ShowMessage("初始化WINSOCK错误");
WSACleanup();
}
if((sck=socket(AF_INET,SOCK_STREAM,0))==SOCKET_ERROR)
{
ShowMessage("SOCKET错误");
closesocket(sck);
WSACleanup();
}
to.sin_family=AF_INET;
to.sin_port=htons(926);
to.sin_addr.s_addr=htonl(INADDR_ANY);
if(setsockopt(sck,SOL_SOCKET,SO_REUSEADDR,(LPSTR)&flag,sizeof(flag))==SOCKET_ERROR)
{
ShowMessage("setsockopt error!");
closesocket(sck);
}
if(bind(sck,(struct sockaddr *)&to,sizeof(to))==SOCKET_ERROR)
{
ShowMessage("Could not bind");
closesocket(sck);
}
else
{
listen(sck,1);
hThread=CreateThread(NULL,0,ReadClient,(LPVOID)0,0,&dwTid);
CloseHandle(hThread);
}
}
//
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HANDLE hThread;
DWORD dwTid;
if(OpenDialog1->Execute())
{
hThread=CreateThread(NULL,0,WriteClient,(LPVOID)OpenDialog1->FileName.c_str(),0,&dwTid);
CloseHandle(hThread);
}
}
同个网络的
两台
计算机怎么设置
局域网
,
两台
电脑
怎么样连在同一个
局域网
《
两台
电脑
怎么样连在同一个
局域网
》由会员分享,可在线阅读,更多相关《
两台
电脑
怎么样连在同一个
局域网
(8页珍藏版)》请在人人文库网上搜索。1、
两台
电脑
怎么样连在同一个
局域网
有了
两台
电脑
,想把他们连在同一个
局域网
,怎么办呢 ?下 面由 小编给你做出详细的
两台
电脑
连在同一个
局域网
方法介绍!希望对你有帮助!
两台
电脑
连在同一个
局域网
方法:你只需要一跟2机专用的网线,
电脑
市场有售。连接到2台机器的网卡上设置一...
局域网
中如何在
两台
电脑
之间传输大型
文件
上述10.12.13.14是此
电脑
的ip,9879是HTTP服务的端口号,daxingwenjian.zip是一个
文件
。上述的9879是选择的端口号,要确保该端口号没有被占用。
两台
(或多台)
电脑
怎么实现
文件
共享
关于
文件
共享,总结了几种实现方式,大家可以根据自己的需求选择合适的共享方式 一、在同一个
局域网
内(无论是连接的WiFi还是网线),工作的需要,需要共享一些
文件
: 1、找到需要共享的
文件
夹(或者
文件
)位置,如下图,比如需要共享“我的
电脑
的C盘” 2、在对应的
文件
夹,也就是桌面
文件
夹,右键鼠标,点击属性 3、进入属性面板后,选择共享,然后点击高级共享 4、进入高级...
通过网线构建
局域网
实现
电脑
共享
文件
朋友需要内部联网共享
文件
,以
两台
电脑
为例。给大家分享具体操作流程,多台依次类推,下面就看看如何操作吧,准备网线连接
两台
电脑
。 打开方式:控制面板——网络和internet——网络和共享中心——高级共享设置 (1)启用所有的网络发现 (2)启用所有的
文件
和打印机共享 (3)设置无密码保护的共享 打开方式:打开网络和共享中心 ,点击更改设配器设置,在以太网那里鼠标右键属性,双击Internet 协议版本4(TCP/IPv4)。 分别设置如下。每台设置的ip地址不一样,其他一样即可, 后面有原
一台交换机,两根普通网线,
两台
电脑
,如何搭建
局域网
?
事前准备:
两台
电脑
分别用一根网线与交换机相连(如果
两台
电脑
直接用普通网线(直连线)相连,是无法ping通的;得用交叉线相连才可以,如果用普通网线,必须要有交换机作媒介) step1:
电脑
A打开以太网,并设置IPV4选项卡里的IP地址为192.168.0.253 step2:
电脑
B按同样方式打开,设置IP地址为192.168.0.254 然后
两台
电脑
都按如下图片所示方式操作: 之后,
两台
电脑
就可以互相ping通了! 下面,介绍
两台
电脑
在已能ping通的基础上,如何
互传
文件
首先,
电脑
A创建一个
文件
夹
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章