zoukankan      html  css  js  c++  java
  • WINSOCK 传送文件

    SERVER:

    // send_server.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <WinSock2.h>
    #include <stdio.h>
    #pragma comment(lib,"ws2_32.lib")
    
    int main(int argc,char** argv)
    {
    	WSADATA wsadata;
    	if (WSAStartup(MAKEWORD(2,2),&wsadata) == -1)
    	{
    		printf("wsastartup error
    ");
    	}
    
    	SOCKET server;
    	server = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    	if (server == SOCKET_ERROR)
    	{
    		printf("server socket start error
    ");
    		return 0;
    	}
    
    	sockaddr_in server_service;
    	server_service.sin_family = AF_INET;
    	server_service.sin_port = htons(8000);
    	server_service.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    
    	if (bind(server,(sockaddr*)&server_service,sizeof(server_service)) == SOCKET_ERROR)
    	{
    		printf("Bind Port error
    ");
    		return 0;
    	}
    
    	if (listen(server,5) == SOCKET_ERROR)
    	{
    		printf("Listen client error
    ");
    		return 0;
    	}
    
    	SOCKET acceptsocket;
    	printf("wait accept recv data
    ");
    	while (1)
    	{
    		acceptsocket = SOCKET_ERROR;
    		while (acceptsocket == SOCKET_ERROR)
    		{
    			acceptsocket = accept(server,NULL,NULL);
    
    		}
    		printf("Client connetcd
    ");
    		server = acceptsocket;
    		break;
    	}
    
    	char sendbuf[1024] = {0};
    	DWORD dwread;
    	BOOL bret;
    	char filename[] = "test.exe";
    	HANDLE hfile = CreateFileA(filename,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
    	while (true)
    	{
    		bret = ReadFile(hfile,sendbuf,1024,&dwread,NULL);
    		if (bret == false)
    		{
    			printf("read file error
    ");
    			break;
    		}
    		else if (dwread == 0)
    		{
    			printf("send file ok");
    			break;
    		}else
    		{
    			send(server,sendbuf,dwread,0);
    		}
    	}
    	CloseHandle(hfile);
    	WSACleanup();
    	return 0;
    }
    

      

    CLIENT:

    // send_client.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <stdio.h>
    #include <WinSock2.h>
    #pragma comment(lib,"ws2_32.lib")
    
    int main()
    {
    	WSADATA wsadata;
    	int iResult = WSAStartup(MAKEWORD(2,2),&wsadata);
    	if (iResult != NO_ERROR)
    	{
    		printf("Errpr at wsastartup
    ");
    	}
    	SOCKET client;
    	client = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    	if (client == INVALID_SOCKET)
    	{
    		printf("error at socket():%ld
    ",WSAGetLastError());
    		WSACleanup();
    		return 0;
    	}
    
    	sockaddr_in clientService;
    	clientService.sin_family = AF_INET;
    	clientService.sin_port = htons(8000);
    	clientService.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    
    	if (connect(client,(SOCKADDR*)&clientService,sizeof(clientService)) == SOCKET_ERROR)
    	{
    		printf("Faied to error
    ");
    		WSACleanup();
    		return 0;
    	}
    
    	char recvbuf[1024] = {0};
    	int read;
    	DWORD dwWrite;
    	BOOL bRet;
    	char filename[] = "test.exe";
    	HANDLE hfile = CreateFileA(filename,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
    
    	while (true)
    	{
    		read = recv(client,recvbuf,1024,0);
    		if (read ==-1)
    		{
    			break;
    		}
    		bRet = WriteFile(hfile,recvbuf,read,&dwWrite,NULL);
    
    		if (bRet == FALSE)
    		{
    			MessageBoxW(NULL,_T("Write buffer error
    "),NULL,MB_OK);
    		}
    	}
    	MessageBoxW(NULL,_T("write buffer susccess
    "),NULL,MB_OK);
    	return 0;
    }
    

    在发送文件之前,我们可以利用getfilesize来获取文件打开的大小。

  • 相关阅读:
    实习小白::(转) Cocos2d-x 3.0开发(五)关联程序逻辑与cocoStudio导出文件
    实习小白::(转)Cocos2d-x 3.0开发(六)使用cocoStudio创建一个骨骼动画
    实习小白::(转) Cocos2d-x 3.0 开发(七)在程序中处理cocoStudio导出动画
    实习小白::(转) cocos2d-x使用cocosStudio编辑的动画文件
    (转)cocos2d-x 每帧动画的播放设置一个监听函数的做法
    Filter
    使用Cookie记住用户名和密码
    动态规划
    热分布
    背包问题
  • 原文地址:https://www.cnblogs.com/killbit/p/4211844.html
Copyright © 2011-2022 走看看