一、Android Studio

1.布局文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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">

    <Button
        android:id="@+id/but_c"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_centerVertical="true"
        android:layout_marginStart="150dp"
        android:text="发送"/>

</RelativeLayout>

效果:
在这里插入图片描述
这个界面只设计了一个按钮

2.主函数MainActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "信息";
    Button button_c;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button_c = findViewById(R.id.but_c);
        button_c.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                final String URL= "http://192.168.31.81:8080/communication/Servlet";//根据自己的项目需要修改

                Log.i(TAG, "onClick: 发送了 ");

                new Thread(new Runnable() {
                    public void run()
                    {
                        String msg = "";
                        try {
                            java.net.URL url = new URL(URL);//生成一个URL实例,指向我们刚才设定的地址URL

                            //openConnection()方法只是创建了一个HttpURLConnection实例,并不是真正连接,在连接之前可以设置一些属性
                            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

                            conn.setRequestMethod("POST"); //设置请求方式为post

                            conn.setReadTimeout(5000);//设置超时信息
                            conn.setConnectTimeout(5000);//设置超时信息

                            conn.setDoInput(true);//设置输入流,允许输入
                            conn.setDoOutput(true);//设置输出流,允许输出
                            conn.setUseCaches(false);//设置POST请求方式不能够使用缓存

                            //定义我们要传给servlet的参数,格式好像一定要xxx=xxx,代表键值对,如果有多组,要加一个&,                                                                                         //如“cmd1=version&cmd2=value”
                            String data = "cmd=version";

                            //获取输出流,其实在这之前还应该有一个操作:conn.connect();意思为建立HttpURLConnection连接,只不过//getOutputStream()方法会隐含进行连接,所以不调用connect()也可以建立连接
                            OutputStream out = conn.getOutputStream();

                            //把data里的数据以字节的形式写入out流中
                            out.write(data.getBytes());

                            //刷新,将数据缓冲区中的数据全部输出,并清空缓冲区
                            out.flush();

                            //关闭输出流并释放与流相关的资源
                            out.close();

                            //接受返回信息
                            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                            String line = null;
                            if ((line = reader.readLine()) != null) {
                                msg = line;
                                Log.i(TAG, "onClick: 接受了" + msg);
                            }
                            conn.disconnect();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }

                }).start();
            }
        });
    }
}

其中的http://192.168.31.81:8080/communication/Servlet
ip地址+端口号+项目名+类名

3.查看ip地址的方法:

Win+R,输入cmd在命令行中输入ipconfig

 IPv4 地址 . . . . . . . . . . . . : 192.168.31.81

上面这个就是ip地址

4.权限文件AndroidManifest.xml

加入

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

全部代码如下

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

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

    <application
        android:allowBackup="true"
        android:usesCleartextTraffic="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Communication"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

二、Myeclipse

1.新建一个Servlet

package com;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Servlet extends HttpServlet {
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;


	@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        //避免使用super.doPost(request,response)
		System.out.printf("接受\n");
        PrintWriter out = response.getWriter();
        String cmd=request.getParameter("cmd");
        if(cmd.compareTo("version")==0) {
 
            out.print("OK");
            System.out.printf("对\n");
            out.flush();
            out.close();
        }
        else
        {
            out.print("No");
            System.out.printf("错\n");
            out.flush();
            out.close();
        }
    }
 
 
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
 
    }
}

2.在web.xml文件中加入

 <servlet>
    <display-name>Servlet</display-name>
    <servlet-name>Servlet</servlet-name>
    <servlet-class>com.Servlet</servlet-class>
</servlet>
 
<servlet-mapping>
    <servlet-name>Servlet</servlet-name>
    <url-pattern>/Servlet</url-pattern>
</servlet-mapping>

com.Servlet是文件的路径
com是包名
Servlet是类名
全部代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <display-name>Servlet</display-name>
    <servlet-name>Servlet</servlet-name>
    <servlet-class>com.Servlet</servlet-class>
</servlet>
 
<servlet-mapping>
    <servlet-name>Servlet</servlet-name>
    <url-pattern>/Servlet</url-pattern>
</servlet-mapping>
</web-app>

3.部署项目

File->Export
在这里插入图片描述
Java EE->WAR file,Next之后选择路径就完成了
在这里插入图片描述
把生成的**.war文件放到Tomcat目录下的webapps**文件夹下
在这里插入图片描述

运行Tomcat时,war文件会自动解压

三 、最终效果:

点击了“发送”按钮,Android studio显示发送了,Myeclipse接收到,显示“接受”,如果信息一致显示“对”,并且向Android studio返回“ok”,Android studio显示“接受了ok”。
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐