Win32 API中可以进行文件传输的函数是什么或者有哪些,socket编程,不要MFC.
3个回答
展开全部
简单的文件传输socket可以做到。
//客户端
#include <iostream>
#include <winsock2.h>
BOOL InitSock()
{
WORD wVersionRequested;
WSADATA wsaData;
DWORD err;
wVersionRequested = MAKEWORD(1,1);
err = WSAStartup( wVersionRequested , &wsaData);
if(err != 0)
{
return FALSE;
}
if( LOBYTE(wsaData.wVersion) != 1 ||
HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup();
return FALSE;
}
return TRUE;
}
void main(void)
{
//建立连接
if (!InitSock())
{
cout<<"Socket initiate failed!"<<endl;
return ;
}
SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
char ip[20] = "127.0.0.1";//本机用这个IP,其他机器的时候自己改地址
cout<<"Origin destination ip is :"<<ip<<endl<<"Please input new destination ip:";
cin>>ip;
cout<<"This is your new destination ip:"<<ip<<endl;
addrSrv.sin_addr.S_un.S_addr = inet_addr(ip);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(8088);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//文件读取,用二进制读取,这部分网上一搜一大把,不给你写了。
//读取1024字节就发送一次,尽量不要一次太多,太多的话不是同一台机器会出问题。
// fopen 或者用fstream 都可以
closesocket(sockConn);
WSACleanup();
}
//服务器端
#include "winsock2.h"
#include "iostream"
BOOL InitSock()
{
WORD wVersionRequested;
WSADATA wsaData;
DWORD err;
wVersionRequested = MAKEWORD(1,1);
err = WSAStartup( wVersionRequested , &wsaData);
if(err != 0)
{
return FALSE;
}
if( LOBYTE(wsaData.wVersion) != 1 ||
HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup();
return FALSE;
}
return TRUE;
}
void main(void)
{
if (!InitSock())
{
cout<<"Socket initiate failed!"<<endl;
return ;
}
SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(80);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
listen(sockSrv,10);
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR_IN);
while(1)
{
cout<<"Wait for connect..."<<endl;
SOCKET sockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len);
cout<<"Connect building done."<<endl;
char sendWel[100];
sprintf(sendWel,"Welcome %s to our home!",
inet_ntoa(addrClient.sin_addr));
send(sockConn,sendWel,strlen(sendWel)+1,0);
sprintf(sendWel,"%s has connected with this computer.",
inet_ntoa(addrClient.sin_addr));
//建立一个新文件,和上面的差不多,用二进制形势打开并可以写入
while (1)
{
//接收数据函数
recv(sockConn,recvBuf,100,0);
//判断是不是结束符,是结束符就break
//不是结束符就写入文件
closesocket(sockConn);
}
//关闭文件
WSACleanup();
}
不懂的你继续追问。
//客户端
#include <iostream>
#include <winsock2.h>
BOOL InitSock()
{
WORD wVersionRequested;
WSADATA wsaData;
DWORD err;
wVersionRequested = MAKEWORD(1,1);
err = WSAStartup( wVersionRequested , &wsaData);
if(err != 0)
{
return FALSE;
}
if( LOBYTE(wsaData.wVersion) != 1 ||
HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup();
return FALSE;
}
return TRUE;
}
void main(void)
{
//建立连接
if (!InitSock())
{
cout<<"Socket initiate failed!"<<endl;
return ;
}
SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
char ip[20] = "127.0.0.1";//本机用这个IP,其他机器的时候自己改地址
cout<<"Origin destination ip is :"<<ip<<endl<<"Please input new destination ip:";
cin>>ip;
cout<<"This is your new destination ip:"<<ip<<endl;
addrSrv.sin_addr.S_un.S_addr = inet_addr(ip);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(8088);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//文件读取,用二进制读取,这部分网上一搜一大把,不给你写了。
//读取1024字节就发送一次,尽量不要一次太多,太多的话不是同一台机器会出问题。
// fopen 或者用fstream 都可以
closesocket(sockConn);
WSACleanup();
}
//服务器端
#include "winsock2.h"
#include "iostream"
BOOL InitSock()
{
WORD wVersionRequested;
WSADATA wsaData;
DWORD err;
wVersionRequested = MAKEWORD(1,1);
err = WSAStartup( wVersionRequested , &wsaData);
if(err != 0)
{
return FALSE;
}
if( LOBYTE(wsaData.wVersion) != 1 ||
HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup();
return FALSE;
}
return TRUE;
}
void main(void)
{
if (!InitSock())
{
cout<<"Socket initiate failed!"<<endl;
return ;
}
SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(80);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
listen(sockSrv,10);
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR_IN);
while(1)
{
cout<<"Wait for connect..."<<endl;
SOCKET sockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len);
cout<<"Connect building done."<<endl;
char sendWel[100];
sprintf(sendWel,"Welcome %s to our home!",
inet_ntoa(addrClient.sin_addr));
send(sockConn,sendWel,strlen(sendWel)+1,0);
sprintf(sendWel,"%s has connected with this computer.",
inet_ntoa(addrClient.sin_addr));
//建立一个新文件,和上面的差不多,用二进制形势打开并可以写入
while (1)
{
//接收数据函数
recv(sockConn,recvBuf,100,0);
//判断是不是结束符,是结束符就break
//不是结束符就写入文件
closesocket(sockConn);
}
//关闭文件
WSACleanup();
}
不懂的你继续追问。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题不是简单的socket问题,你需要以下几个步骤来完成:
1. 定义文件传输协议,例如,如何把文件的名称、属性等信息以某种格式发送给对方
2. 需要你先把文件内容读取出来,然后将读取的内容使用socket通过网络来传输,
3. 接收方需要根据文件传输协议将将收到的内容重新存为文件。
1. 定义文件传输协议,例如,如何把文件的名称、属性等信息以某种格式发送给对方
2. 需要你先把文件内容读取出来,然后将读取的内容使用socket通过网络来传输,
3. 接收方需要根据文件传输协议将将收到的内容重新存为文件。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
socket编程是面向字节流的,一个函数可完成不了,而且socket编程没有几个星期恐怕你也搞不懂,怎么可能在知道里学会
追问
没有直接可以用来传输文件的函数吗...
可能是我想多了,看来这个东东还得鼓捣一会儿了...
最后,我得一个确定的答案,如果真没有,我分就给你,然后我就去鼓捣一下socket...
追答
TransmitFile,send之类的函数都研究研究吧
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询