基于UDP协议的文件传输

原创 2015年07月09日 17:24:31

客户端将本地文件传输给服务端,服务端接收文件并保存,输出文件名和内容

客户端:

#include<stdio.h>
#include<string.h>
#include<Winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
	WSAData wsaData;
	int err=WSAStartup(WINSOCK_VERSION,&wsaData);
	if(0!=err)
	{
		return -1;
	}
	SOCKET sock;
	sock=socket(AF_INET,SOCK_DGRAM,0);
	if(INVALID_SOCKET==sock)
	{
		printf("socket()Failed:%d\n",WSAGetLastError());
		WSACleanup();
		return -1;
	}
	
	char data[]="Hello World!";
	char dest_ip[]="222.196.201.224";      //目的IP
	unsigned short dest_port=20000;//目的端口
	
	sockaddr_in RemoteAddr;
	RemoteAddr.sin_family = AF_INET;
	RemoteAddr.sin_port = htons(dest_port);
	RemoteAddr.sin_addr.s_addr=inet_addr(dest_ip);
	
	
	char path[100]={"0"};
    while(1)
	{
		printf("请输入文件路径:  (例如D:\\1.txt)\n");
	gets(path);
    FILE* fp=fopen(path,"rb"); // 读写二进制文件 记得 加  b
	
    if(!fp)
    {
        printf("error!");
        return 1;
    }
	
	else
	{
		printf("文件已经打开,等待传输...\n");
	}
	
	char rbuf[1024]={0};
	while(!feof(fp))
	{	
		 sendto(sock,path,strlen(path),0,(sockaddr*)&RemoteAddr,sizeof(RemoteAddr));
		memset(rbuf,0,1024);
		fread(rbuf,1,1024,fp);
		int sByte = sendto(sock,rbuf,strlen(rbuf),0,(sockaddr*)&RemoteAddr,sizeof(RemoteAddr));
		if(SOCKET_ERROR==sByte)
		{
			printf("sendto()Failed:%d\n",WSAGetLastError());
			closesocket(sock);
			WSACleanup();
			return -1;
		}
	}
	fclose(fp);
}
    closesocket(sock);
    WSACleanup();
    return 0;
}

服务端:

#include<stdio.h>
#include<string.h>
#include<Winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#define MAX_BUF 65536
int main()
{
	WSAData wsaData;
	int err=WSAStartup(WINSOCK_VERSION,&wsaData);
	if(0!=err)
	{
		return -1;
	}
	SOCKET sock;
	sock=socket(AF_INET,SOCK_DGRAM,0);
	if(INVALID_SOCKET==sock)
	{
		printf("socket()Failed:%d\n",WSAGetLastError());
		WSACleanup();
		return -1;
	}
	
	sockaddr_in LocalAddr;
	LocalAddr.sin_family=AF_INET;
	LocalAddr.sin_port=htons(20000);
	LocalAddr.sin_addr.s_addr=htonl(INADDR_ANY);
	
	err=bind(sock,(sockaddr*)&LocalAddr,sizeof(LocalAddr));
	if(SOCKET_ERROR==err)
	{
		printf("bind()Failed:%d\n",WSAGetLastError());
		closesocket(sock);
		WSACleanup();
		return -1;
	}
	
	char rbuf[MAX_BUF];
	memset(rbuf,0,MAX_BUF);
	sockaddr_in RemoteAddr;
	
	int RemoteLen = sizeof(RemoteAddr);
	
	
	char path[100]={"0"};
	char name[100]={"0"};
	printf("请输入写入文件路径:(例如E:\\2.txt)\n");
	gets(path);
	
    FILE *fp=fopen(path,"wb");
    
    if(!fp)
    {
        printf("打开文件失败!");
        return 1;
    }
	else
	{
		printf("文件已经打开,等待传输...\n");
	}
	
	while(1)
	{	
		recvfrom(sock,name,1024,0,(sockaddr*)&RemoteAddr,&RemoteLen);
		printf("文件名字为:\n %s\n",name);
		memset(rbuf,0,1024);
		int rByte=recvfrom(sock,rbuf,1024,0,(sockaddr*)&RemoteAddr,&RemoteLen);
		
		if(SOCKET_ERROR==rByte)
		{
			printf("recvfrom()Failed:%d\n",WSAGetLastError());
			closesocket(sock);
			WSACleanup();
			return -1;
		}
		fwrite(rbuf,strlen(rbuf),1,fp);
		fseek(fp,0,2);
		printf("写入的文件内容为:\n %s\n",rbuf);
		
	}
fclose(fp);
	
    closesocket(sock);
    WSACleanup();
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

用UDP实现可靠文件传输

                                                                                                 用UD...
  • pclili
  • pclili
  • 2004年12月12日 13:07
  • 12355

基于UDP的文件传输

B.1     基于UDP的文件传输 代码下载地址:http://download.csdn.net/detail/xsl1990/4970910 内容: 我们需要在客户和服...
  • XSL1990
  • XSL1990
  • 2013年01月07日 20:22
  • 11474

udp可靠文件传输实现(基于滑动窗口机制)

老板逼着让写一个基于UDP可靠通信的demo以作为其网络课程的课件内容之一来给学生演示  dup是不可靠的,为了实现可靠文件传输,需要加入额外的机制来确保可靠,在此选用了滑动窗口机制。   滑动窗口介...
  • yysdsyl
  • yysdsyl
  • 2009年06月11日 13:22
  • 12226

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

基于对话框的MFC图形界面程序的选择文件读取文件

上一篇文章,我们写了我们可能第一个用C++写的图形界面程序,现在我们要实现我们可能最需要的一个功能,从电脑的文件中读取文件的操作。实际上非常简单 下面的代码实际上是我们打开文件按钮的监听操作。()还...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

C#UDP通信+文件传输

整了好几天发现还是有点问题,发送文件的时候不能选择想要存放文件的地址,让我郁闷!如有高人希望指点! 红色字体处,设置文件保存位置,我想用                     SaveF...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于UDP协议的文件传输
举报原因:
原因补充:

(最多只允许输入30个字)