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来获取文件打开的大小。

  • 相关阅读:
    在C#中使用消息队列RabbitMQ
    从url到页面经历了什么
    jsonp跨域远离
    DNS预处理
    一个架构师需要考虑的问题
    angular2和Vue2对比
    图片多的问题
    xinwenti
    xss和csrf
    ajax是什么
  • 原文地址:https://www.cnblogs.com/killbit/p/4211844.html
Copyright © 2011-2022 走看看