关于TransmitFile函数

javakids 2007-03-23 12:41:32
我就是在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;
}
...全文
161 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
__Shakespeare 2009-12-29
  • 打赏
  • 举报
回复
if(file=NULL) 你这里边给file赋值为NULL,transmitfile当然不发送啦
  • 打赏
  • 举报
回复
我遇到知已了,我也是同样的问题!。。。。正在努力寻找答案!

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧