c++ - 在 c++ 中通过套接字发送图片(发送函数),但不接收完整(Windows)!

标签 c++ windows sockets 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);

服务器代码:

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

配置套接字:

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


}

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

请帮助我,坦克。

最佳答案

您正在犯常见的错误。您不能假设 recv() 会填满缓冲区。您必须循环直到获得所需的所有数据,并且必须使用 recv() 返回的计数值。

关于c++ - 在 c++ 中通过套接字发送图片(发送函数),但不接收完整(Windows)!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18983370/

相关文章:

c++ - 使用 spirit 解析器从字符串中提取值

c++ - 在 Visual Studio 2013 中使用 opencv

c - Windows:BOOL 有多大?

python - ctypes:使用 lib.so(在 Mac 上)时指针地址修改,但在使用 lib.dll(在 Windows 上)时不修改

Java路径末尾的两个点有意想不到的结果

C# Tcp 异步套接字数据读取逻辑

java - Android 套接字连接中出现错误 'null'

c++ - OpenCV 缺少头文件

c++ - 如何将 std::map 与 boost::phoenix 一起使用?

python - 如何在 Linux 服务器中捕获 SYN tcpdump 数据包?