Android基于socket实现的简单C/S聊天通信功能

实现Android基于socket的C/S聊天通信功能,可以分成如下几个步骤:

1. 建立Server端

  • 使用Java的ServerSocket类创建Server端。
  • 在Server端运行一个死循环,等待Client发来连接请求(使用Socket类进行连接)。
  • 接收Client发送的消息,处理并返回数据给Client。

下面是一个Java Server端的示例代码:

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(7777);
        System.out.println("Server started.");

        // 等待客户端连接
        Socket clientSocket = serverSocket.accept();
        System.out.println("Server connected to Client: " + clientSocket.getInetAddress());

        // 读取客户端发来的消息
        InputStream inputStream = clientSocket.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

        String line = "";
        while ((line = bufferedReader.readLine()) != null) {
            System.out.println("Client says: " + line);
        }

        // 写入数据到客户端
        OutputStream outputStream = clientSocket.getOutputStream();
        PrintWriter out = new PrintWriter(new OutputStreamWriter(outputStream));
        out.println("Hello Client!");
        out.flush();

        clientSocket.close();
        serverSocket.close();
    }
}

2. 建立Client端

  • 使用Java的Socket类创建Client端。
  • 连接到Server端。
  • 发送消息到Server端,等待Server端返回的消息。

下面是一个Java Client端的示例代码:

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 7777);
        System.out.println("Client connected to Server.");

        // 向Server发送消息
        OutputStream outputStream = socket.getOutputStream();
        PrintWriter out = new PrintWriter(new OutputStreamWriter(outputStream));
        out.println("Hello Server!");
        out.flush();

        // 读取Server返回的消息
        InputStream inputStream = socket.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

        String line = "";
        while ((line = bufferedReader.readLine()) != null) {
            System.out.println("Server says: " + line);
        }

        socket.close();
    }
}

3. Android端的实现

  • 在Android项目中添加AndroidManifest.xml文件中添加网络权限 <uses-permission android:name="android.permission.INTERNET"/>
  • 使用Android的线程池处理Server端向Client传递数据的任务。
  • 通过Socket连接到Server端。
  • 使用BufferedReader和PrintWriter进行数据读写操作。

下面是一个Android端的实现示例代码:

public class MainActivity extends AppCompatActivity {
    private EditText mEditText;
    private Button mButton;
    private TextView mTextView;
    private ExecutorService mThreadPool;

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

        mEditText = findViewById(R.id.et_text);
        mButton = findViewById(R.id.btn_send);
        mTextView = findViewById(R.id.tv_text);
        mThreadPool = Executors.newCachedThreadPool();

        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String text = mEditText.getText().toString().trim();
                mThreadPool.execute(new ServerTask(text));
                mEditText.setText("");
            }
        });
    }

    private class ServerTask implements Runnable {
        private String mMessage;

        public ServerTask(String message) {
            mMessage = message;
        }

        @Override
        public void run() {
            try {
                Socket socket = new Socket("localhost", 7777);
                PrintWriter writer = new PrintWriter(socket.getOutputStream());
                BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                writer.println(mMessage);
                writer.flush();
                String result = reader.readLine();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mTextView.setText(result);
                    }
                });
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android基于socket实现的简单C/S聊天通信功能 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • java数据库唯一id生成工具类

    Java数据库唯一ID生成工具类是用于在关系型数据库中生成唯一ID的工具类。在开发中,经常需要使用唯一ID作为数据库表的主键,而使用数据库自增长的整数或GUID字符串作为主键,会存在一些问题,如分布式环境下高并发的ID生成、算法不唯一等问题。因此,使用Java数据库唯一ID生成工具类,可以解决这些问题。 下面给出一个完整的攻略,介绍如何使用Java数据库唯一…

    Java 2023年5月20日
    00
  • Java后台实现浏览器一键导出下载zip压缩包

    关于Java后台实现浏览器一键导出下载zip压缩包的攻略,可以分为以下几个步骤: 步骤1:将需要下载的文件打包成zip压缩包 在Java后台中,我们可以使用java.util.zip包中的ZipOutputStream类来实现将多个文件打包成一个zip压缩包。具体实现代码如下: public static void zipFiles(List<File…

    Java 2023年5月19日
    00
  • Java 超详细讲解异常的处理

    Java 超详细讲解异常的处理 什么是异常? 在 Java 中,异常指的是程序在运行过程中发生了意外情况或错误,导致程序无法继续运行的情况。比如数组访问越界、空指针等。 异常的分类 在 Java 中,异常分为两类:受检异常和非受检异常。 受检异常(Checked Exception) 受检异常指的是在编译时就能够发现的异常,需要在代码中显式的进行处理。比如读…

    Java 2023年5月19日
    00
  • Java实战之吃货联盟订餐系统

    Java实战之吃货联盟订餐系统攻略 系统需求 用户可以查看菜单列表信息 用户可以注册账号 用户可以登录进入系统 用户可以选择菜品下单 用户可以查看订单列表 用户可以修改个人信息和密码 技术选型 使用Spring Boot进行快速开发 使用MyBatis进行数据库操作 使用Thymeleaf进行前端页面渲染 使用Spring Security进行权限管理 使用…

    Java 2023年5月24日
    00
  • 用Java实现24点游戏

    用Java实现24点游戏攻略 游戏规则 24点游戏是一种比较常见的撕牌游戏,游戏过程如下: 取出4张扑克牌,其中可能包含1-10、J、Q、K四种牌面; 对玩家来说,可以自由任意(+-*/)组合这4张扑克牌,使其结果为24即可; 玩家须进行计算,并在30秒内作出答案,如果时间到了仍没有答案则选手视为失败。 游戏实现思路 为实现24点游戏,我们可以通过Java实…

    Java 2023年5月19日
    00
  • springMVC几种页面跳转方式小结

    SpringMVC几种页面跳转方式小结 在SpringMVC中,有多种方式可以实现页面跳转。本文将介绍其中的几种方式,并提供示例说明。 方式一:使用redirect 使用redirect可以实现页面的重定向。在控制器方法中,我们可以使用”redirect:”前缀来指定重定向的URL。下面是一个示例的控制器方法: @GetMapping("/redi…

    Java 2023年5月17日
    00
  • 如何自定义hibernate validation注解示例代码

    自定义Hibernate Validation注解可以通过以下步骤来完成: 1. 定义注解 自定义注解需要使用@Constraint注解进行标记,并提供以下信息: validatedBy:用于指定执行验证逻辑的验证器类; message:用于指定验证不通过时返回的错误消息; groups:用于指定验证所属的组,默认情况下采用javax.validation.…

    Java 2023年5月20日
    00
  • Spring Boot 捕捉全局异常 统一返回值的问题

    Spring Boot是一个快速构建Spring应用程序的框架,可以快速实现RESTful API的开发。在开发过程中,我们难免会遇到异常,如数据库连接异常、空指针异常等。如果不处理这些异常,可能会导致应用程序挂掉,或出现不可预期的结果。而且在开发中,我们也需要统一的返回值格式,这样可以提高开发效率。 因此,本文将详细讲解如何通过Spring Boot捕捉全…

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部