关闭

基于UDP协议的文件传输

798人阅读 评论(0) 收藏 举报
分类:

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

客户端:

#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;
}


0
0
查看评论

基于UDP的文件传输

B.1     基于UDP的文件传输 代码下载地址:http://download.csdn.net/detail/xsl1990/4970910 内容: 我们需要在客户和服务器间传送一个文件。 流程: 1.客户端向服务器发送请求的文件名; 2.服...
  • XSL1990
  • XSL1990
  • 2013-01-07 20:22
  • 12042

基于UDP的文件传输

  • 2010-10-15 18:14
  • 284KB
  • 下载

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

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

Linux网络编程之使用UDP传输文件

原创作品,转载时请务必以超链接形式标明文章原始出处:http://blog.csdn.net/gqb666/article/details/8970207,作者:gqb666          接上篇博文Linux网络编程之使用TCP传输文件。...
  • gqb666
  • gqb666
  • 2013-05-26 14:59
  • 9557

udp传输大文件的一个例子

服务器server.c /************************************************************************* > File Name: server.c > Author: ljh *************...
  • sanmaoljh
  • sanmaoljh
  • 2016-08-11 16:18
  • 3809

用UDP实现可靠文件传输

                         ...
  • pclili
  • pclili
  • 2004-12-12 13:07
  • 12590

C#下用UDP实现的文件传输

  • 2010-04-01 21:57
  • 406KB
  • 下载

基于UDP的文件传输.zip

  • 2013-01-07 20:32
  • 1KB
  • 下载

UDP:Java实现简单大文件传输

今天闲来无事,想起过几天要写一个UDP文件传输的插件服务,于是xia
  • u010811257
  • u010811257
  • 2014-09-21 20:21
  • 3270

基于MFC的UDP文件传输

  • 2014-04-16 15:16
  • 4.51MB
  • 下载
    个人资料
    • 访问:57880次
    • 积分:921
    • 等级:
    • 排名:千里之外
    • 原创:37篇
    • 转载:37篇
    • 译文:0篇
    • 评论:6条
    最新评论