Android 使用getsockname获取到的端口不正确?

采用jni方式,使用Bsd socket,创建UdpSocket,并bind端口为零后,使用getsockname获取Android内核分配的本地端口,用于与服务器协商端口进行数据发送,协商端口成功,但是实际使用该Socket发送数据时,从抓包的数据来看,Socket随机又分配了一个端口来进行数据发送,并未使用获取到的端口,比如,我通过getsockname获取到的端口是58990,并用这个端口与服务方协商以获得服务方的接收端口,但是发送数据时,客户端却使用了48876或其他任意可用端口,但是同样的代码在PC上执行却完全正确,获取到什么端口就使用什么端口,求教各位,难道手机(Android和Iphone手机上执行结果一样)和PC在端口分配上有那么大的差别吗?应该怎样获得正确的端口号?

[顶]这个问题你应该咨询一下售后服务,还有有的手机虽然同是安卓或者是塞班但他们还是有区别的,你可以搜索一下你的手机机型详细情况,根据系统适配的需要调换就行了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2024-10-15
udp socket需要在sendto的时候才真正绑定端口。你在创建socket的时候可以马上发送1个字节数据出去,就可以正确获取绑定的端口了。

Android 使用getsockname获取到的端口不正确?
[顶]这个问题你应该咨询一下售后服务,还有有的手机虽然同是安卓或者是塞班但他们还是有区别的,你可以搜索一下你的手机机型详细情况,根据系统适配的需要调换就行了。

getsockname()错误代码
接着,"WSAENETDOWN"错误代码通常出现在网络子系统出现问题时。这可能是因为网络硬件故障、网络服务中断或网络配置问题。当Windows套接口实现检测到网络子系统失效时,就会产生此错误。在遇到此错误时,需要检查网络连接状态,确保所有网络设备正常工作。"WSAEFAULT"错误代码表示namelen参数不够大,无法容纳所需...

getpeername和getsockname的区别是什么
你accept确实是是知道了对端的地址和端口号,但如果只有个一个socket 描述符的时候,你就使用这两个函数获取对应的地址和端口了。

为什么获取客户端ip地址总是:204.204.204.204
也就是说你accept没有成功,所以里面没数据。我知道你进行了出错判断,判断accept有没有成功。但是很可惜,accept失败的时候并不是返回NULL 它返回的是 (SOCKET) -1 (或者写 ~0 也一样)

bind()用法
通过bind()函数绑定套接字后,应用程序可以使用getsockname()获取分配的地址,但需注意,getsockname()仅在套接字连接成功后才会填充互联网地址,以适应多主机环境中的地址多样性。对于需要绑定到特定端口(如rsh等保留端口)的应用程序,可以采取如下步骤:首先,创建一个SOCKADDR_IN结构体和一个套接字对象...

javapython?
host?=?socket.gethostname()???#?设置一个端口???port?=?12345???#?将套接字与本地主机和端口绑定???serversocket.bind((host,port))???#?设置监听最大连接数???serversocket.listen(5)???#?获取本地服务器的连接信息???myaddr?=?serversocket.getsockname()???print("服务器地址:%s"%str(myad...

php的sockets是做什么用的
socket_create_listen() 在指定端口打开一个socket监听socket_create_pair() 产生一对没有区别的socket到一个数组里socket_create() 产生一个socket,相当于产生一个socket的数据结构socket_get_option() 获取socket选项socket_getpeername() 获取远程类似主机的ip地址socket_getsockname() 获取本地socket的ip地址socket...

Python实现的使用telnet登陆聊天室
另外,让我惊奇的是它可以在Android的平板上运行SL4A的Python解释器上运行(需要稍微改几句代码,貌似是编码的那个地方,我记不清了)。现在这个是可以在PC上跑起来的。废话不多,直接放代码了,就一个py文件而已,而且注释是乱七八糟的,编码风格也不好(好神似我在用类C语言的习惯)。242526272829303132333...

javapython?
host?=?socket.gethostname()???#?设置一个端口???port?=?12345???#?将套接字与本地主机和端口绑定???serversocket.bind((host,port))???#?设置监听最大连接数???serversocket.listen(5)???#?获取本地服务器的连接信息???myaddr?=?serversocket.getsockname()???print("服务器地址:%s"%str(myad...

相似回答
大家正在搜