安卓app与阿里云服务器的无线通信(非局域网)
Posted 行稳方能走远
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓app与阿里云服务器的无线通信(非局域网)相关的知识,希望对你有一定的参考价值。
参照:安卓app与阿里云服务器的无线通信(非局域网)
作者:图触靓
发布时间: 2020-08-01 16:13:14
网址:https://blog.csdn.net/bhbhhyg/article/details/107732156
写在阿里云里面的服务器代码:
-
#include <sys/types.h>
-
#include <sys/socket.h>
-
#include<netinet/in.h>
-
#include <arpa/inet.h>
-
#include<stdio.h>
-
#include<stdlib.h>
-
#include <unistd.h>
-
#include<string.h>
-
#include <sys/types.h>
-
#include <sys/stat.h>
-
#include <fcntl.h>
-
int initsocket(){
-
int s_fd=socket(AF_INET, SOCK_STREAM,
0);
-
if (s_fd==
-1)
-
{
-
perror(
"socket");
-
exit(
-1);
-
}
-
struct sockaddr_in addr;
-
memset(&addr,
0,
sizeof(struct sockaddr_in));
-
-
addr.sin_family=AF_INET;
-
addr.sin_port=htons(
3389);
//端口号,注意要先在网络与安全->安全组中先添加一个端口
-
inet_aton(
"172.23.250.6",&addr.sin_addr);
//IP地址,该ip地址要填内网地址!!
-
// addr.sin_port=htons(atoi(argv[2]));
-
// inet_aton(argv[1],&addr.sin_addr);
-
int bid=bind(s_fd,(struct sockaddr *)&addr,
sizeof(struct sockaddr_in));
-
listen(s_fd,
10);
-
int len=
sizeof(struct sockaddr_in);
-
return s_fd;
-
}
-
int main(){
-
char readbuf[
2]={
0};
-
int s_fd=initsocket();
//初始化服务器
-
-
printf(
"wait connect.....\\n");
-
while(
1){
-
int fd_a=accept(s_fd,
NULL,
NULL);
//该函数用来接受连接,没有连接的时候也可以用来阻塞while(1)
-
printf(
"connect\\n");
-
memset(readbuf,
0,
2);
//初始化字符串
-
int r=read(fd_a,readbuf,
2);
//读指令
-
if(r==
-1)
-
{
-
perror(
"read");
-
}
-
else
-
{
-
-
printf(
" cmd is %c \\n",readbuf[
0]);
//打印安卓客户端发来的指令
-
-
}
-
}
-
return
0;
-
}
注意!!!:以上ip地址需要填内网的ip,服务器内网ip可以通过ifconfig命令来查看。端口号要先在网络与安全->安全组中先添加
安卓app中发送指令代码:
-
public void sendMessage() {
-
-
new Thread(
new Runnable() {
-
-
@Override
-
public void run() {
-
// TODO Auto-generated method stub
-
try {
-
Socket client =
new Socket(
"47.115.9.106",
3389);
//注意ip要填你阿里云服务器的外网ip,端口号要在网络与安全->安全组中先添加端口,在到云电脑内把该端口拉入白名单
-
-
OutputStream
out = client.getOutputStream();
-
out.write(message.getBytes());
-
-
out.close();
-
client.close();
-
-
-
}
catch (Exception e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
-
}
-
}).start();
-
-
}
拉入防火墙白名单
这里的指令有三个
firewall-cmd --list-all 列出所有端口号白名单
firewall-cmd --add-port=8888/tcp --permanent 添加一个8888端口为白名单
firewall-cmd --reload 更新防火墙操作
安卓对应按键的写法:(Netuils为一个类,我的发送指令的sendMessage方法是写在类里面的)
-
Button kd=(Button)findViewById(R.id.kd);
-
kd.setOnClickListener(
new OnClickListener() {
-
-
@Override
-
public void onClick(View arg0) {
-
new NetUtils(
"A").sendMessage();
-
}
-
});
效果
当我们的安卓手机连接任意的网络,点击按钮后,都能将按键对应的指令发送到云服务器上:
以上是关于安卓app与阿里云服务器的无线通信(非局域网)的主要内容,如果未能解决你的问题,请参考以下文章
安卓视频播放(阿里云视频点播播放器SDK+SurfaceView)
阿里云通信发布全新号码认证服务, 重新定义手机号码认证的方式