实验结果如下
踩过的坑
安卓连网需要权限
需要在全局配置文件中加入
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
安卓中网络链接不能放在主线程中
新建子线程 在子线程中使用socket
云服务器配置
服务器
地址写为私有ip
客户端
地址写为弹性公网ip
demo
部分业务代码
一个麻瓜服务器
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
int main()
{
int sockfd = socket(AF_INET,SOCK_STREAM,0);
assert(sockfd!= -1);
struct sockaddr_in saddr,caddr;
memset(&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(6678);
saddr.sin_addr.s_addr = inet_addr("192.168.7.255");
int res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
assert(res != -1);
listen(sockfd,5);
while(1)
{
int len = sizeof(caddr);
int c = accept(sockfd,(struct sockaddr*)&caddr,&len);
if(c < 0)
{
continue;
}
printf("ip:%s,port:%d\n",inet_ntoa(caddr.sin_addr),ntohs(caddr.sin_port));
while(1)
{
char buff[128] = {0};
int n = recv(c,buff,40,0);
if(n <= 0 )
{
break;
}
printf("buff = %s",buff);
send(c,"ok",2,0);
}
close(c);
printf("close 1");
}
exit(0);
Kotlin客户端代码
class MainActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn_sign.setOnClickListener()
{
var i = 0;
Thread()
{
try{
val soc = Socket("119.3.232.83", 6678);
val dout = PrintStream(soc.getOutputStream())
dout.print("666");
i = 2;
dout.flush()
dout.close()
soc.close()
}
catch (e:Exception){
e.printStackTrace()
}
}.start();
}
}
}