gpt4 book ai didi

C++ linux 代理服务器通信

转载 作者:行者123 更新时间:2023-11-30 02:01:57 24 4
gpt4 key购买 nike

尝试搭建代理服务器。
从客户端接收 -> 发送到服务器 -> 从服务器接收 -> 发送到客户端。

代理从客户端接收到正确的数据。
但之后我从服务器接收到 0 个字节。

这是我应该从客户端接收并发送到服务器的数据包

0A 00 2C 01 23 00 0C 00 B3 01

这是我的代码;

    //intercept commu by server <-> client

memset(buffer, 0, buffer_len);

//recv from client
if((bytecount = recv(*csock, buffer, buffer_len, 0))== -1){
fprintf(stderr, "Err: receiving data %d\n", errno);
return 0;
}

//display what we got from the client
printf("Received bytes %d\n", bytecount);
for ( int i = 0; i < bytecount; i++ ) {
printf( "%02x ", static_cast<unsigned char>( buffer[i] ) );
}
printf("\n");

//send to server what we got from the client
if((gbytecount=send(gsock, buffer, buffer_len, 0))== -1){
fprintf(stderr, "Error sending data %d\n", errno);
goto FINISH;
}


//recv from server
if((gbytecount = recv(gsock, buffer, buffer_len, 0))== -1){
fprintf(stderr, "Error receiving data %d\n", errno);
return 0;
}

printf("Received bytes %d\n", gbytecount);
for ( int i = 0; i < gbytecount; i++ ) {
printf( "%02x ", static_cast<unsigned char>( buffer[i] ) );
}
printf("\n");

//send back to client what we got from the server
if((bytecount = send(*csock, buffer, buffer_len, 0))== -1){
fprintf(stderr, "Err: sending data %d\n", errno);
return 0;
}

如何检查从客户端接收到代理后发送到服务器的内容?
我的逻辑有问题吗?


更新

我想我发现了问题,是因为 buffer_len。

现在我有 recv() 字节 93。但是服务器再次发送另一个数据包。
我该如何处理我的代码?

目前我的代码是:

recv from client -> send to server -> recv from server -> send to client.

我怎样才能使这段代码像如果客户端/服务器发送一些东西,它会

转发给对方?


更新

必须解决它。谢谢。

最佳答案

我不知道您的服务器和客户端,但可能是服务器实际上关闭 导致 recv 结果为 0 的套接字,关闭的原因可能是可能是你从客户端接收bytecount数据,但是向服务器发送buffer_len数据,这可能会导致在向服务器发送有效数据后出现一些无效数据!

关于C++ linux 代理服务器通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13653188/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com