windows向linux发送文件的小程序

windows下发送文件:

send.exe 192.168.0.100 12345 test.rar

#include "stdafx.h"

#include <Winsock2.H>   
#include <string>
#include <iostream>
#include <stdio.h>
  
#pragma comment( lib, "WS2_32.lib" )   
#define BUF_SIZE    64          // 缓冲区大小  

int _tmain( int argc, _TCHAR* argv[] )
{
	if ( argc <= 3 )
	{
		printf( "Too few arguments" );
		return -1;
	}

	const char* ip = argv[1];
	int port = atoi( argv[2] );

	WSADATA     wsd;			// 用于初始化Windows Socket   
        SOCKET      sHost;			// 与服务器进行通信的套接字   
        SOCKADDR_IN servAddr;			// 服务器地址   
        char        buf[BUF_SIZE];		// 用于接受数据缓冲区   
        int         retVal;			// 调用各种Socket函数的返回值   

	// 初始化Windows Socket
        if( WSAStartup( MAKEWORD( 2, 2 ), &wsd ) != 0 )   
        {   
            printf( "WSAStartup failed !\n" );   
        	return -1;   
    	}     
    	// 创建套接字   
    	sHost = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );   
    	if( INVALID_SOCKET == sHost )   
    	{   
        	printf( "socket failed !\n" );   
        	WSACleanup();   
        	return -1;   
    	}    
    	// 设置服务器地址   
    	servAddr.sin_family = AF_INET;   
    	servAddr.sin_addr.S_un.S_addr = inet_addr( ip );		
    	servAddr.sin_port = htons( port );										
    	int sServerAddlen = sizeof(servAddr); 

    	// 连接服务器   
    	retVal = connect(sHost,(LPSOCKADDR)&servAddr,sizeof(servAddr));
	if ( SOCKET_ERROR == retVal )
	{
		printf( "connect failed!\n" );
	}

	FILE* pFile = fopen( argv[3], "rb" );
	char buffer[BUF_SIZE];
	while(true)
	{
		size_t nLen = fread( buffer, sizeof( char ), BUF_SIZE, pFile );
		if ( nLen == 0 )
		{
			break;
		}

		retVal = send(sHost,buffer,nLen,0);   
		if(SOCKET_ERROR == retVal)   
		{   
			printf("send failed !\n");   
			closesocket(sHost);   
			WSACleanup();   
			return -1;   
		}   	  

	}
    	// 释放资源   
    	closesocket(sHost);   
    	WSACleanup();   
	// 暂停,按任意键继续
	system("pause");
    	return 0;  
}


linux端接收文件:

rcv.exe 192.168.0.100 12345 test.rar

#include <netinet/in.h>
#include <arpa/inet.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <assert.h>
#include <stdio.h>
#include <string.h>

#define BUFFER_SIZE 1024

int main( int argc, char* argv[] )
{
	if( argc <=3 )
	{
		return -1;
	}

	const char* ip = argv[1];
	int port = atoi( argv[2] );

	int sock = socket( PF_INET, SOCK_STREAM, 0 );
	assert( sock >= 0 );

	struct sockaddr_in address;
	bzero( &address, sizeof( address ));
	address.sin_family = AF_INET;
	inet_pton( AF_INET, ip, &address.sin_addr );
	address.sin_port = htons( port );

	int ret = bind( sock, ( struct sockaddr* )&address, sizeof( address ) );
	assert( ret != -1 );

	ret = listen( sock, 5 );
	assert( ret != -1 );

	struct sockaddr_in client;
	socklen_t client_addrlength = sizeof( client );
	int connfd = accept( sock, ( struct sockaddr* )&client, &client_addrlength );
	if( connfd < 0 )
	{
		return -1;
	}
	else
	{
		char buffer[BUFFER_SIZE];

		FILE* pFile;
		pFile = fopen(argv[3], "wb");
		while( 1 )
		{
			ret = recv( connfd, buffer, BUFFER_SIZE - 1, 0 );
			if ( ret <= 0 )
				break;
			fwrite( buffer, sizeof( char ), ret, pFile );
		}
		fclose( pFile );
	}
        close( sock );
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值