Android聊天室客户端的实现

本文介绍了一个简单的Android聊天室客户端的实现过程。通过新建Android工程,在MainActivity中实现了与服务器的连接和消息发送功能。使用AsyncTask进行异步操作,避免阻塞主线程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇我们已经将服务器端给搭建好了,所以我们可以来实现Android的客户端了。
我们新建一个Android工程,直接在MainActivity中实现我们的代码即可。

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ip=(EditText)findViewById(R.id.ip);//输入服务器的IP
        et=(EditText)findViewById(R.id.et);//输入我们所要说的话
        connection=(Button)findViewById(R.id.b1);
        send=(Button)findViewById(R.id.b2);
        text=(TextView)findViewById(R.id.text);
        connection.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                connect();//连接服务端
            }
        });
        send.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                send();//发送消息

            }
        });
    }

我们在onCreate()在初始化我们的控件,并且调用我们的方法

在connect()方法中,我们实现连接服务端

/**
*使用AsyncTask异步访问我们的服务端,不然会堵塞主线程
*/
public void connect() {


        AsyncTask<Void, String, Void> read = new AsyncTask<Void, String, Void>() {

            @Override
            protected Void doInBackground(Void... arg0) {
                try {
                    socket = new Socket(ip.getText().toString(), 12345);//连接服务端
                    writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));//获取输出流
                    reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));//获取输入流
                    if(is){
                    writer.write(1+"\n");
                    writer.flush();
                    is=false;
                    }
                    publishProgress("@success");

                } catch (UnknownHostException e1) {
                    Toast.makeText(MainActivity.this, "无法建立链接", Toast.LENGTH_SHORT).show();
                } catch (IOException e1) {
                    Toast.makeText(MainActivity.this, "无法建立链接", Toast.LENGTH_SHORT).show();
                }
                try {
                    String line;
                    while ((line = reader.readLine())!= null) {
                        publishProgress(line);
                    }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onProgressUpdate(String... values) {
                if (values[0].equals("@success")) {
                    Toast.makeText(MainActivity.this, "链接成功!", Toast.LENGTH_SHORT).show();

                }
                text.append("别人说:"+values[0]+"\n");//经过测试,如果不加“\n”将不会显示消息
                super.onProgressUpdate(values);
            }
        };
        read.execute();

    }
/**
*通过输出流将消息发送出去
*/
public void send(){
        try {
            text.append("我说:"+et.getText().toString()+"\n");
            writer.write(et.getText().toString()+"\n");
            writer.flush();
            et.setText("");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

至此,我们一个简单的Android聊天室就完成了。本人也是新手,写的不好,请多多见谅。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值