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>