通过套接字发送图片(发送功能)用c ++,但不要完成(Windows)!

M.R*_*aei 2 c++ sockets windows send recv

我正在从客户端向服务器发送数据,但图片没有收到完整的.

客户代码:

FILE *fr = fopen(tmppicsend, "rb");
char* buffer;
buffer = (char*) malloc(sizeof(char)*size);
fread(buffer, size, 1, fr);
send_len_pic = send( m_socket_pic, buffer, size, 0 );
recv( m_socket_pic, rec_end_check, 32, 0 );
fclose(fr);
free(buffer);
Run Code Online (Sandbox Code Playgroud)

服务器代码:

FILE *fw = fopen(fname, "wb");
char* buffer;
buffer = (char*) malloc(sizeof(char)*size);
int rec_len = recv( current_client, buffer, size, 0 );
buffer[size]='\0';
fwrite(buffer, size, 1, fw);
size -= size;
free(buffer);
fclose(fw);
Run Code Online (Sandbox Code Playgroud)

配置套接字:

WSADATA wsaData_pic;
SOCKET m_socket_pic;
SOCKET m_backup_pic;
sockaddr_in con_pic;

 // Initialize Winsock.
int iResult = WSAStartup( MAKEWORD(2,2), &wsaData_pic );
if ( iResult != NO_ERROR ){
    //printf("Error at WSAStartup()\n");
}
// Create a socket.
m_socket_pic = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );

if ( m_socket_pic == INVALID_SOCKET ) {
    //printf( "Error at socket(): %ld\n", WSAGetLastError() );
    //WSACleanup();
}

m_backup_pic = m_socket_pic;

// Connect to a server.
con_pic.sin_family = AF_INET;
con_pic.sin_addr.s_addr = inet_addr( ip );
con_pic.sin_port = htons( 2200 );

if ( connect( m_backup_pic, (SOCKADDR*) &con_pic, sizeof(con_pic) ) == SOCKET_ERROR) {
    //printf( "Failed to connect.\n" );
    //WSACleanup();
}else
{   
    m_socket_pic=m_backup_pic;
}


}
Run Code Online (Sandbox Code Playgroud)

当我比较这些图片时,我看到序列号包中的错误(数据包没有定期接收).图片(来自客户端和服务器的图片)大小相同.我想发送JPEG图片.

请帮助我,坦克.

use*_*421 10

你犯了通常的错误.你不能假设recv()填充缓冲区.您必须循环,直到获得所需的所有数据,并且必须使用recv()返回的计数值.

  • @ M.Rezaei请问,问题是关于服务器代码中的`recv()`,而不是客户端代码中的`send()`... (8认同)