安卓与服务端使用socket通信 -- 初始demo

GoogleVip8 1年前 ⋅ 709 阅读

好记性不如烂笔头,记录一下安卓socket代码

manifest.xml添加安卓通信权限

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.xxx.xxx">
    ...
		<!--    通信权限-->
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>

在安卓里面,涉及到网络连接等耗时操作时,不能将其放在UI主线程中,需要添加子线程,在子线程进行网络连接

ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(()->{

    // 要连接的服务端IP地址和端口
    String host = "192.168.1.163";
    int port = 55533;
    // 与服务端建立连接
    Socket socket = null;
    try {
        socket = new Socket(host, port);
        // 建立连接后获得输出流
        OutputStream outputStream = socket.getOutputStream();
        String message="你好  socket";
        socket.getOutputStream().write(message.getBytes("UTF-8"));
        outputStream.close();
        socket.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
});

服务端代码

// 监听指定的端口
int port = 55533;
ServerSocket server = new ServerSocket(port);

// server将一直等待连接的到来
System.out.println("server将一直等待连接的到来");
Socket socket = server.accept();
// 建立好连接后,从socket中获取输入流,并建立缓冲区进行读取
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int len;
StringBuilder sb = new StringBuilder();
while ((len = inputStream.read(bytes)) != -1) {
    //注意指定编码格式,发送方和接收方一定要统一,建议使用UTF-8
    sb.append(new String(bytes, 0, len,"UTF-8"));
}
System.out.println("get message from client: " + sb);
inputStream.close();
socket.close();
server.close();

这种一般也是新手写法,但是能够循环处理多个Socket请求,不过当一个请求的处理比较耗时的时候,后面的请求将被阻塞,所以一般都是用多线程的方式来处理Socket,即每有一个Socket请求的时候,就创建一个线程来处理它。地址:[服务端多线程socket通信处理之线程池]: http://googlevip8.com/post/114


全部评论: 0

    我有话说: