android - 移植:Android/Linux 客户端/服务器套接字通信问题

标签 android linux sockets android-ndk porting

我正在将服务器/客户端套接字应用程序从 Windows 移植到 Linux/Android,但我似乎无法弄清楚问题是什么。

基本上,客户端所做的就是向服务器发送一串字符,服务器将字符串大写,然后将字符串回显给客户端,客户端打印出结果。在服务器回显大写字符串和客户端接收结果之间的某个位置,存在错误,但即使使用调试器或 Wireshark 我也无法完全弄清楚。

服务器跟踪:

socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
bind(3, {sa_family=AF_INET, sin_port=htons(9099), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
listen(3, 5)                            = 0
ioctl(3, FIONREAD, [134515712])         = -1 EINVAL (Invalid argument)
select(0, [], NULL, NULL, NULL)        

客户端的踪迹:

socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(9099), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
getpeername(3, {sa_family=AF_INET, sin_port=htons(9099), sin_addr=inet_addr("127.0.0.1")}, [16]) = 0
send(3, "four score and seven years ago\0\0"..., 128, 0) = 128
ioctl(3, FIONREAD, [0])                 = 0
select(0, [], NULL, NULL, {1, 0})       = 0 (Timeout)
write(2, "Exception code: 00000507, data: "..., 52Exception code: 00000507, data: 00000000 ((null):0)
) = 52
shutdown(3, 2 /* send and receive */)   = 0
close(3)                                = 0
exit_group(1)                           = ?

最佳答案

问题是 select() api 调用的第一个参数应该包含 Linux 上的 [最高套接字 FD 值 + 1]。

关于android - 移植:Android/Linux 客户端/服务器套接字通信问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13400695/

相关文章:

c - Printf 在套接字调用之前不工作

java - Android Studio 从模块启动 Activity

java - Java线程与原生Linux线程的匹配

使用转换 (STL) 时的 C++ 错误

android - 如何在Raspberry Pi和Android智能手机之间进行同步通信?

java - 如何使这个非阻塞服务器成为多线程的?

android - 在Android开发中,这个: "The debugger and garbage collector are currently loosely integrated."有什么含义

php - 使用 MySQL 查询作为 PHP 脚本的标识,将 FCM 推送通知发送到 Android 应用程序中的特定设备

android - 如何在android中获得两次时间之间的分钟差

linux - "` 处或附近的 Postgresql 还原错误“