android socket聊天服务器程序

采用的开发环境是android studio 2.2 preview 7 

下面是android聊天的服务器程序,客户端程序类似

package com.example.ict.chat_server;


import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class MainActivity extends Activity {
    public static final int REFRESH = 0x000001;
    private TextView number = null;
    private TextView receive_text = null;
    private TextView connect_state = null;
    private EditText editText = null;
    private Button button = null;
    private int i = 0;
    private Handler mHandler = null;
    private static final int PORT = 5555;
    Socket socket = null;
    ServerSocket server = null;
    BufferedReader reader;
    PrintWriter writer = null;
    char r_data[] = new char[100];
    public static int connetct = 0;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        connect_state = (TextView)findViewById(R.id.connect_state);
        number = (TextView) findViewById(R.id.number);
        receive_text = (TextView)findViewById(R.id.receive_text);
        editText = (EditText)findViewById(R.id.editText);
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                writer.println(editText.getText());
                writer.flush();
            }
        });

        mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (msg.what == REFRESH) {
                    number.setText("收到信息数量"+i);

                    receive_text.setText(String.valueOf(r_data));
                    for(int i=0;i<100;i++)
                    {
                        r_data[i] = 0;
                    }
                    if(socket.isConnected()) {
                        connect_state.setText("已连接");
                    }
                }

                super.handleMessage(msg);
            }
        };
        new MyThread().start();
    }
    public class MyThread extends Thread {
        public void run() {
            try
            {
                server = new ServerSocket(5555);
                socket = server.accept();
                reader = new BufferedReader(
                        new InputStreamReader(socket.getInputStream()));
                writer = new PrintWriter(socket.getOutputStream());
                writer.println("Hello Client!");
                writer.flush();

            }catch(IOException e)
            {
                e.printStackTrace();
            }

            while (!Thread.currentThread().isInterrupted()) {      //判断当前线程是否被打断了
                Message msg = new Message();
                msg.what = REFRESH;
                if (connetct == 0) {
                    mHandler.sendMessage(msg);
                    connetct = 1;
                } else if(connetct == 1)
                {
                        try {
                            if(reader.read(r_data)>0)
                            {
                                i++;
                            }

                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                        mHandler.sendMessage(msg);// 如果发Handler消息在获取数据以前,可能造成上方把读取数据设置为空,因为每次设置完更新数据都会把缓存r_data清零
                        try {
                            Thread.sleep(100);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                }
                else {

                }

            }
        }
    }
}



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值