关于TransmitFile函数
我就是在D盘下建了个test.txt并且在文件中写了一串字符,但我在用TransmitFile函数传文件的时候,接受放接受的数据为0 ,不知道是什么原因,我是在同一台机子上运行接收和发送端,原代码如下,请高手帮忙看下:
接受端:
#include<stdio.h>
#include<iostream.h>
#include<Winsock2.h>
#include<winbase.h>
#define DEFAULT_PORT 5150
#define DEFAULT_BUFF 4096
int port=DEFAULT_PORT;
DWORD WINAPI function(LPVOID lparam)
{
SOCKET server;
server=(SOCKET)lparam;
char buff[DEFAULT_BUFF];
int ret;
while(1)
{
ret=recv(server,buff,DEFAULT_BUFF,0);
if(ret==0)
{break;}
else
if(ret==SOCKET_ERROR)
{
printf("recv faild : %d",WSAGetLastError());
break;
}
buff[ret]='\0';
printf("recv data : %s",buff);
}
return 0;
}
int main()
{
SOCKET listenSocket;
SOCKET acceptSocket;
SOCKADDR_IN server;
SOCKADDR_IN client;
HANDLE thread;
WSADATA wsadata;
DWORD id;
int size=sizeof(client);
server.sin_family=AF_INET;
server.sin_port=htons(port);
server.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
if(WSAStartup(MAKEWORD(2,2),&wsadata))
{
printf("false");
}
listenSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
bind(listenSocket,(SOCKADDR *)&server,sizeof(server));
listen(listenSocket,5);
acceptSocket=accept(listenSocket,(SOCKADDR *)&client,&size);
printf("accept socket: %s,%d",inet_ntoa(client.sin_addr),ntohs(client.sin_port));
thread=CreateThread(NULL,0,function,(LPVOID)acceptSocket,0,&id);
if (thread==NULL)
printf("thread error");
Sleep(10000);
closesocket(acceptSocket);
WSACleanup();
return 0;
}
发送端:
#include<stdio.h>
#include<Winsock2.h>
#include<winbase.h>
#include<mswsock.h>
int main()
{
SOCKET connectSocket;
SOCKADDR_IN server;
WSADATA wsadata;
HANDLE file,templete;
int ret,i;
LPOFSTRUCT fileData;
server.sin_family=AF_INET;
server.sin_port=htons(5150);
server.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
if(WSAStartup(MAKEWORD(2,2),&wsadata))
{
printf("false");
}
connectSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
i=connect(connectSocket,(SOCKADDR *)&server,sizeof(server));
if (i==SOCKET_ERROR)
{
printf("connect refused!");
return 0;
}
//ret=send(connectSocket,msg,strlen(msg),0);
file=CreateFile("d:\\exercise\\test.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,templete);
if(file=NULL)
printf("create error %d ",GetLastError());
TransmitFile(connectSocket,file,0,0,0,NULL,TF_DISCONNECT);
//CloseHandle(file);
closesocket(connectSocket);
WSACleanup();
return 0;
}