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实现文件复制、剪切文件和删除示例

    下面是“Java实现文件复制、剪切文件和删除”示例的完整攻略。 1. 复制文件 要使用Java复制文件,需要使用Java的IO库。有两种方法可以实现文件复制:通过字节流或字符流。 1.1 字节流复制 使用字节流复制文件的方法非常简单。以下是代码示例: import java.io.*; public class FileCopy { public stati…

    Java 2023年5月20日
    00
  • SpringSceurity实现短信验证码功能的示例代码

    下面我将详细讲解如何使用Spring Security实现短信验证码功能。这里假设你已经有了一个基于Spring Security的Web应用程序,现在要添加短信验证码功能。 准备工作 在开始实现之前需要进行一些准备工作: 1.添加Spring Security支持短信验证码功能的依赖; 在pom.xml中添加以下依赖: <dependency>…

    Java 2023年5月20日
    00
  • Javaweb监听器实例之统计在线人数

    讲解一下 “Javaweb监听器实例之统计在线人数” 的完整攻略。 什么是Javaweb监听器 Javaweb监听器是一种特殊的类,在JavaWeb应用服务器启动、关闭或发生某种事件时执行相应的方法。监听器提供了一种方便的方法来实现一些常见的业务逻辑。比如,统计在线人数、记录日志、缓存数据、初始化应用等。 如何使用Javaweb监听器统计在线人数 1、编写监…

    Java 2023年6月15日
    00
  • Java操作IO对象流进行数据的读写

    针对Java操作IO(输入/输出)对象流进行数据的读写,一般包括以下的几个步骤: 创建IO对象流(如FileInputStream、FileOutputStream等)以及处理器流(如InputStreamReader、OutputStreamWriter等) 读、写或处理流中读写的数据(如读文本文件、写二进制文件等) 关闭流以释放资源,避免内存泄漏 具体步…

    Java 2023年5月26日
    00
  • 带你详细了解Java值传递和引用传递

    带你详细了解Java值传递和引用传递 Java中传递参数有两种方式:值传递和引用传递。理解这两种方式在Java编程中的应用非常重要。 值传递 在Java中,所有的基本数据类型都是采用值传递。当调用方法时,基本数据类型的参数会被复制一份,传入方法内部,方法内对参数的任何改变都不会影响方法外部的数据。这是因为复制后的参数是一个新的对象,与外界的原始对象没有关系。…

    Java 2023年5月26日
    00
  • 亲手带你解决Debug Fastjson的安全漏洞

    下面我将为你讲解如何解决Fastjson的安全漏洞。 什么是Fastjson的漏洞? Fastjson是一款被广泛使用的Java JSON解析器和生成器。然而,在Fastjson中存在一些安全漏洞,使得攻击者可以利用它来执行远程代码、绕过安全措施、拒绝服务攻击等。为了保护我们的应用程序免受这些漏洞的影响,我们需要及时采取措施来解决这些漏洞问题。 解决Fast…

    Java 2023年6月15日
    00
  • Java基本语法笔记(菜鸟必看篇)

    Java基本语法笔记(菜鸟必看篇) 数据类型 Java 中的基本数据类型包括整型、浮点型、布尔型、字符型和字符串型,它们分别为 int、float、double、boolean、char 和 String 类型。 整型 整型又分为四种类型:byte、short、int、long,不同的类型占用的内存大小不同,范围也不同。 byte:占1个字节,范围是 -12…

    Java 2023年5月23日
    00
  • AndroidApk混淆编译时,报告java.io.IOException…错误解决办法

    当进行Android APK混淆编译时,可能会遇到java.io.IOException错误,这通常是由于ProGuard或其他混淆工具未能正确读取输入文件而导致的。以下是解决这个问题的一些方法。 检查混淆配置文件 请确认你的混淆配置文件中是否列出了正确的输入、输出文件路径。查看混淆配置文件,确定输入、输出文件路径是否正确。 示例: -injars <…

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