Android SocketClient库的使用

1.在app目录下的build.gradle里配置:

implementation 'com.github.vilyever:AndroidSocketClient:2.0.1'

2.在根目录下的settings.gradle里配置:

jcenter()
maven { url "https://www.jitpack.io'}

在这里插入图片描述

3.添加权限:

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

4.传入服务器地址获取IP:

/**
* 解析域名获取IP数组
* @param host
* @return
*/
public void getIp(final String host) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                
                try {
                    String[] ipAddressArr = null;
					InetAddress[] inetAddressArr = InetAddress.getAllByName(host);
                    if (inetAddressArr != null && inetAddressArr.length > 0) {
                        ipAddressArr = new String[inetAddressArr.length];
                        for (int i = 0; i < inetAddressArr.length; i++) {
						ipAddressArr[i] = inetAddressArr[i].getHostAddress();
                            Log.i("myipurl", i + "---" + ipAddressArr[i]);  					  
                            if (ipAddressArr[i] != null || !ipAddressArr[i].equals("null")) {
                                MySave.getInstance().saveShare("myIp", ipAddressArr[i]);
                                Log.i("myipurl", "ipAddressArr------:" + ipAddressArr[i]);   
                              }
                        }
					}
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                }

            }
        }).start();

    }

4.主代码:

public class MainActivity extends AppCompatActivity {
    private SocketClient socketClient;
    private SocketClientDelegate delegate;
    private EditText et_text;
    private Button btn_send;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_text = (EditText) findViewById(R.id.et_text);
        btn_send = (Button) findViewById(R.id.btn_send);
        try {
            startSocketClient("");
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        btn_send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String string = et_text.getText().toString().trim();
                if (!TextUtils.isEmpty(string)){
                    socketSendMessage(string);
                    et_text.setText("");
                }
 
            }
        });
    }
 
    //socket通信
    private void startSocketClient() throws IOException {
    
       	socketClient = new SocketClient();
        socketClient.getAddress().setRemoteIP("49.4.69.20");//设置IP,这里设置的是服务器的IP
        socketClient.getAddress().setRemotePort(16018);//设置端口
        socketClient.getAddress().setConnectionTimeout(15 * 1000);//设置超时时间
 
        //socketClient.setCharsetName(CharsetUtil.UTF_8);//设置编码格式,默认为UTF-8
        socketClient.setCharsetName("UTF-8");//设置编码格式,默认为UTF-8
        socketClient.connect(); // 连接,异步进行
 
        //常用回调配置
        // 对应removeSocketClientDelegate
        socketClient.registerSocketClientDelegate(delegate = new SocketClientDelegate() {
            /**
             * 连接上远程端时的回调
             */
            @Override
            public void onConnected(SocketClient client) {
                Log.d("melog", "gamesocket连接成功");
                //launcher.callExternalInterface("gameSocketConnectSuccess", "success");
            }
 
            /**
             * 与远程端断开连接时的回调
             */
            @Override
            public void onDisconnected(SocketClient client) {
                Log.d("melog", "gamesocket连接断开");
                // 可在此实现自动重连
                 socketClient.connect();
                //launcher.callExternalInterface("socketClose", "close");
            }
 
            /**
             * 接收到数据包时的回调
             */
            @Override
            public void onResponse(SocketClient client, @NonNull SocketResponsePacket responsePacket) {
 
                String message = responsePacket.getMessage(); // 获取按默认设置的编码转化的String,可能为null
                Log.i("接收服务端消息:",message);
 
                //launcher.callExternalInterface("socketDataHandler", message);
            }
        });
    }
 
    //发送消息
    private void socketSendMessage(String info) {
        String status = String.valueOf(socketClient.getState());
        if (socketClient != null && status == "Connected") {
            socketClient.sendData(info.getBytes()); // 发送byte[]消息
        }
    }
 
    //前台请求gamesocket连接状态
    private void requestGameSocketConnectFlg() {
        String status = String.valueOf(socketClient.getState());
        //launcher.callExternalInterface("gameSocketFlg", status);
    }
 
    //前台主动断开gamesocket
    private void closeGameSocket() {
        if (socketClient != null) {
            socketClient.removeSocketClientDelegate(delegate);
            socketClient.disconnect();
        }
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值