C++ | TCP - receive
C++ | TCP - receive
我需要帮助...我花了很多时间编写TCP连接以将图像从服务器传输到客户端。
问题是,看起来客户端没有收到所有字节。
服务器输出:
Anfrage erhalten: img_size...Imagesize sended!
Anfrage erhalten: image...Start
1024 bytes send (1)
2048 bytes send (2)
3072 bytes send (3)
...
客户端输出:
Get Imagesize: 75186 bytes
(0) 75186
(0) (0/75186)
(1) (5/75186)
(2) (80/75186)
.
.
.
(16150/75186)
(16227/75186)
此时此刻,客户永远等待...如果发送了数字 (1(,则接收数字 (1( 的字节为 5 个字节?!?!?!嘿嘿?
这是我的客户端代码:
tcp.Send( "image" );
msg = "";
while( msg.length() < size_img ){
cout << "(" << msg.length() << "/" << size_img << ")" << endl;
if( msg.length() + 1024 < size_img ){
g = tcp.receive(1024);
}else{
g = tcp.receive(size_img - msg.length());
}
ss << msg;
ss << g;
msg = ss.str();
ss.str("");
}
string TCPClient::receive(int size)
{
char buffer[size];
memset(&buffer[0], 0, sizeof(buffer));
size_t len = sizeof(buffer);
char *p = buffer;
ssize_t n;
string reply;
while(len > 0 && (n=recv(sock,p,len,0)) > 0){
p += n;
len -= (size_t)n;
}
if ( len > 0 || n < 0 ) {
cout << "receive failed!" << endl;
return nullptr;
}
//buffer[size-1]=' ';
reply = buffer;
return reply;
}
服务器发送功能:
void TCPServer::Send_Bytes(unsigned char* msg, int laenge)
{
for(int i = 0; i < laenge; i=i+1024){
if(i+1024 < laenge){
send(newsockfd,msg+i,1024,0);
}else{
send(newsockfd,msg+i,laenge - i,0);
break;
}
cout << i << endl;
usleep(100000);
}
}
请帮帮我...我不知道该怎么做?!?!?
雅各布斯;)
解决方案:
void TCPClient::receive_char(char* outStr, int size){
char buffer[size];
memset(&buffer[0], 0, sizeof(buffer));
size_t len = sizeof(buffer);
char *p = buffer;
ssize_t n;
while(len > 0 && (n=recv(sock,p,len,0)) > 0){
p += n;
len -= (size_t)n;
}
if ( len > 0 || n < 0 ) {
cout << "receive failed!" << endl;
}
//buffer[size-1]=' ';
for(int i=0; i < size; ++i){
outStr[i] = buffer[i];
}
}
您可以通过以下方式致电:
char data[4096];
memset(&data[0], 0, sizeof(data));
tcp.receive_char(data,4096);
for(int i = 0; i < 4096; i++){
image_bytes[counter] = data[i];
counter++;
}
也许有更好的解决方案... :D
相关文章:
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 提升 Asio TCP 服务器 处理多个客户端
- 通过TCP的PvP通信问题
- C++ boost::asio::ip::tcp::acceptor 有时不接受连接器?
- AWS IoT 开发工具包:通过 TCP 端口 443 使用 MQTT
- 计算出有多少客户端可以连接到我正在使用的一些tcp服务器代码
- 通过单独的 tcp 流建立 http 连接
- 读取 TCP 标头并使用RAW_SOCKET管理 TCP 连接
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- grpc 的 ServerBuilder::AddListeningPort() 总是返回 TCP 端口零
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- 如何在没有侦听器的情况下创建 TCP 连接?
- 为什么当通过 TCP 发送的消息速率增加时,请求-响应消息对的延迟会降低?
- C++ TCP 套接字 | 无法将"std::__cxx11::字符串"转换为"const
- C++ "using tcp=x"到"namespace tcp=x"有什么区别
- C++ | TCP - receive