问题描述: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欢迎分享,转载请注明来源:内存溢出
评论列表(0条)