gpt4 book ai didi

c++ - 套接字客户端使用服务器接受的连接发送

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:29 25 4
gpt4 key购买 nike

客户端使用服务器接受的相同连接发送数据的方法是否正确?

情况是这样的,我的 PC 上运行着蓝牙服务器,而在另一端我有带有客户端和服务器的安卓手机。从 android 端客户端开始连接。我正在使用 android 示例中的蓝牙聊天示例。

Android 上的服务器-客户端看起来像

     BluetoothSocket socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;

// Get the BluetoothSocket input and output streams

tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();

在 PC 端我使用 Bluez用于实现服务器和客户端的库。
代码包括蓝牙接收线程和主线程,每当服务器接受来自 android 手机的连接时,我只需将套接字值分配给全局变量,每当客户端需要发送数据时,它使用相同的套接字发送,

服务器:-

int GLOBAL_CLIENT;
void* recive_bluetooth_trd(void*)
{
...............................
..............................
client = accept(s, (struct sockaddr *)&rem_addr, &opt);
GLOBAL_CLIENT=client;

while(1){
bytes_read = read(client, buf, sizeof(buf));
....................
...................
}

客户:-

void clinet(char *msg, int length){
........................

int bytes_write=write(GLOBAL_CLIENT,message, length);

..........................
}

我的问题是,这是正确的方法吗?问题是有时客户端从 PC 成功发送数据但在 android 端没有接收。

最佳答案

我看到的最大问题是您永远不会离开您的 while(1) 循环,即使客户端断开连接也是如此。读取将立即永远返回 0 字节读取(检查 <= 0 的返回代码),试图发出套接字已断开连接的信号。您的代码将进入一个紧密的无限循环,并耗尽它可以处理单线程的所有 CPU 资源。

您需要确保始终检查套接字和 IO 返回码并正确处理错误。套接字的错误处理通常约为实际套接字代码的 3 倍。

当然,除非 ............. 内容是重要的部分。总是很难判断人们何时隐藏了与他们所问问题相关的代码。

关于c++ - 套接字客户端使用服务器接受的连接发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18415216/

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