java读取空字符串则停止读取_如何在字符串读取完成后停止C recv()?

这段代码展示了C服务器如何在接收到Java客户端发送的空字符串时停止使用recv()读取数据。服务器通过检查每个接收到的字符是否为''来判断是否结束读取。讨论了两种可能的改进方法:一是预先发送URL大小,二是关闭Java套接字。但作者对于这两种方法的实现和影响存在疑问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在读取从Java客户端发送到Socket的C服务器的图像URL . 当检测到char缓冲区[]中有空字符时,服务器停止通过recv()读取,如下面的代码所示:

void * SocketServer::clientController(void *obj)

{

// Retrieve client connection information

dataSocket *data = (dataSocket*) obj;

// Receive data from a client step by step and append data in String message

string message;

int bytes = 0;

do

{

char buffer[12] = {0};

bytes = recv(data->descriptor, buffer, 12, 0);

if (bytes > 0) // Build message

{

message.append(buffer, bytes);

cout << "Message: " << message << endl;

}

else // Error when receiving it

cout << "Error receiving image URL" << endl;

// Check if we are finished reading the image link

unsigned int i = 0;

bool finished = false;

while (i < sizeof(buffer) / sizeof(buffer[0]) && !finished)

{

finished = buffer[i] == '\0';

i++;

}

if (finished)

break;

}

while (bytes > 0);

cout << message << endl;

close(data->descriptor);

pthread_exit(NULL);

}

Is there a better and more elegant way to make this?

我读到了首先发送URL的大小,但我不确切知道如何使用它来停止recv() . 我想这是通过计算收到的字节直到达到URL的大小来完成的 . 那一刻,我们应该读完了 .

另一种方法可能是关闭Java套接字,以便recv()返回-1并且循环将完成 . 但是,考虑到我的Java客户端等待来自C服务器的响应,关闭套接字然后重新打开它似乎不是一个合适的选择 .

谢谢,Héctor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值