Kotlin簡易UI+簡易服務器

實驗結果如下

在這裏插入圖片描述

踩過的坑

安卓連網需要權限

需要在全局配置文件中加入

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

安卓中網絡鏈接不能放在主線程中

新建子線程 在子線程中使用socket

雲服務器配置

服務器
地址寫爲私有ip
客戶端
地址寫爲彈性公網ip

demo

github源碼

部分業務代碼

一個麻瓜服務器

#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();

        }


    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章