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