android与linux通信socket报错opensslprovider

android与linux通信socket报错opensslprovider,第1张

android与linux通信socket报错opensslprovider如下

问题描述:Android 端作为 Socket 服务端,Linux 端作为 Client 端,Android 端给 Linux 端Android 侧发送数据代码:public void sendMessage(final String msg){Log.d(TAG, "即将发送的数据 "+msg)// 发送的数据为 {"info":"The gps switch is not on","status":"Failed"} new Thread(new Runnable() {@Overridepublic void run() {if(outputStream!=null){ 但是对方收到的数据为:7{“info”:“The gps switch is not on”,“status”:“Failed”}首部都会莫名奇妙的出现一个数字或者冒号;出现原因:编码问题,我Android 端发送编码为 UTF-8writer.writeUTF(msg)// 写一个UTF-8的信息所以换成其它方式发送writer.writeBytes(msg)。

由于UDP通信不需要事先建立连接,因此不需要TCP中的connect函数。

服务器端的步骤如下:

1. socket:      建立一个socket

2. bind:          将这个socket绑定在某个端口上(AF_INET)

3. recvfrom:  如果没有客户端发起请求,则会阻塞在这个函数里

4. close:        通信完成后关闭socket

客户端的步骤如下:

1. socket:      建立一个socket

2. sendto:     相服务器的某个端口发起请求(AF_INET)

3. close:        通信完成后关闭socket

可以看到,和TCP相比,步骤少了一些。

这里我们用到了两个新的函数:

int recvfrom(int sockfd, void * buf, size_t len, int flags, struct sockaddr * src_addr, socklen_t * addrlen)

int sendto(int sockfd, const void * buf, size_t len, int flags, const struct sockaddr * dest_addr, socklen_t addrlen)

recvfrom用于接收数据,sendto用于发送数据

recvfrom:

socket:socket套接字

buf:接收到的数据的存放位置

flags:一般情况下为0

src_addr:接收的源地址

addrlen:地址长度

sendto:

socket:socket套接字

buf:要发送的数据的起始地址

flags:一般情况下为0

dest_addr:发送到的目的地址

addrlen:地址长度

还是先上代码:

Makefile:

all: server.c client.c      gcc -Wall client.c -o client      gcc -Wall server.c -o server     clean:      rm -rf *.o client server  


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8323058.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存