實驗結果如下
踩過的坑
安卓連網需要權限
需要在全局配置文件中加入
<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();
}
}
}