Android开发之服务器与移动端通过socket通信

工具

  python、java

python代码

 1 # -*- coding: UTF-8 -*-
 2 
 3 # server.py
 4 import socket
 5 
 6 IP_address = "192.168.1.104"
 7 port = 51706
 8 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 9 s.bind((IP_address, port))
10 s.listen(4)
11 print("waite for connection")
12 while True:
13     conn, addr = s.accept()
14     data = conn.recv(1024)
15     if not data:
16         print("this?")
17         break
18     conn.sendall(data)  # 把接收到数据原封不动的发送回去
19     print('Received', data.decode("utf-8"))
20     conn.close()

移动端代码

mainactivaty

package com.lvjt.appfirst;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.os.Bundle;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "Socket_Android";

    private EditText mEditText = null;
    private TextView tx1 = null;
    private Button mButton = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mButton = (Button) findViewById(R.id.Button01);
        mEditText = (EditText) findViewById(R.id.etSendMsg);
        tx1 = (TextView) findViewById(R.id.tx);

        mButton.setOnClickListener(new OnClickListener() {

            @Override
            @SuppressLint("NewApi")
            public void onClick(View v) {
                StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy);
                // TODO Auto-generated method stub
                setTitle("Federal_Learning");
                Socket socket = null;

                try {
                    /* 指定Server的IP地址,此地址为局域网地址,如果是使用WIFI上网,则为PC机的WIFI IP地址
                     * 在ipconfig查看到的IP地址如下:
                     * Ethernet adapter 无线网络连接:
                     * Connection-specific DNS Suffix  . : IP Address. . . . . . . . . . . . : 192.168.1.100
                     */
                    InetAddress serverAddr = InetAddress.getByName("192.168.1.104");// TCPServer.SERVERIP
                    Log.d("TCP", "C: Connecting...");

                    // 应用Server的IP和端口建立Socket对象
                    socket = new Socket(serverAddr, 51706);
                    String message = "---Test_Socket_Android---";

                    Log.d("TCP", "C: Sending: '" + message + "'");

                    // 将信息通过这个对象来发送给Server
                    PrintWriter out = new PrintWriter(new BufferedWriter(
                            new OutputStreamWriter(socket.getOutputStream())),
                            true);

                    // 把用户输入的内容发送给server
                    String toServer = mEditText.getText().toString();
                    Log.d(TAG, "To server:'" + toServer + "'");
                    out.println(toServer);
                    out.flush();


                    // 接收服务器信息
                    BufferedReader in = new BufferedReader(
                            new InputStreamReader(socket.getInputStream()));
                    // 得到服务器信息
                    String msg = in.readLine();
                    Log.d(TAG, "From server:'" + msg + "'");
                    // 在页面上进行显示
                    tx1.setText(msg);
                } catch (UnknownHostException e) {
                    Log.e(TAG, "192.168.1.100 is unkown server!");
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    try {
                        socket.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }

        });
    }
}

activaty_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <EditText
        android:id="@+id/etSendMsg"
        android:layout_marginTop="10pt"
        android:layout_width="match_parent"
        android:layout_height="20pt" />

    <TextView
        android:layout_marginTop="50pt"
        android:layout_width="match_parent"
        android:layout_height="50pt"
        android:id="@+id/tx"
        />
    <Button
        android:layout_marginTop="10pt"
        android:id="@+id/Button01"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="button" />


</LinearLayout>

androidManiFest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.lvjt.appfirst">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Appfirst">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>

    </application>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

</manifest>

 

posted @ 2021-04-27 17:56  南理工学渣  阅读(225)  评论(0编辑  收藏  举报