2016-7-30 TextView自动下滚,以及TCP Client,(更新壹)

public class MainActivity extends AppCompatActivity {
    private String ip = "192.168.31.162";
    private int port = 20001;
    private TextView _tv;
    String str = "";
    MyApp myApp;
    Connection conn;
    boolean isRun = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        _tv = (TextView) this.findViewById(R.id.tv);
        _tv.setMovementMethod(ScrollingMovementMethod.getInstance());

        myApp = (MyApp) getApplication();
        conn = new Connection(ip, port, this);
        myApp.connection = conn;

        new Thread(new Runnable() {
            @Override
            public void run() {
                conn.connect();
                conn.start();
            }
        }).start();
    }

    public void click_start(View view) {
        if (conn.flag) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    String str = "你好服务器";
                    System.out.println("发送给服务器");
                    conn.send(str);
                }
            }).start();
        }else {
            conn.flag = true;
        }

    }

    public void showInTv(String text) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                _tv.append("\n" + conn.toUI() + " | " + MyTime.getTime());

                int offset = _tv.getLineCount() * _tv.getLineHeight();
                if (offset > _tv.getHeight()) {
                    // 更新文字时,使用View的scrollTo(int x,int y)方法
                    // 使其自动滚动到最后一行。
                    _tv.scrollTo(0, offset - _tv.getHeight());
                }
            }
        });
    }

    public class My {
        String mStr;

        public String toUI(String string) {
            showInTv(mStr);
            return null;
        }

    }

    public void click_stop(View view) {
        conn.flag = false;
    }

}
Connection.class
public class Connection extends Thread {

    Socket socket = null;
    DataInputStream reader = null;
    DataOutputStream writer = null;
    public boolean flag = false;
    private String ip;
    private int port;
    String str;
    MainActivity ma;

    public Connection(String ip, int port, MainActivity ma) {
        this.ip = ip;
        this.port = port;
        this.ma = ma;
    }

    public void connect() {
        try {
            if (socket == null || socket.isClosed()) {
                socket = new Socket(ip, port);
                System.out.println("====服务器已连接====");
                if (writer == null) {

                    writer = new DataOutputStream(socket.getOutputStream());
                    reader = new DataInputStream(socket.getInputStream());

                    System.out.println("客户端接收/发送, 已准备完毕...");
                }
                flag = true;
            }
        } catch (IOException e) {
            try {
                reader.close();
                writer.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }
    }

    public void disconnect() {
        try {
            flag = false;
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void send(String string) {
        try {
            if (socket != null) {
                while (flag) {
                    writer.writeUTF(string);
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public boolean isConnected() {
        return socket.isConnected();
    }

    public void run() {

        while (flag) {
            try {
                str = "服务器: " + reader.readUTF();
                System.out.println(str);

                ma.showInTv(str);

            } catch (IOException e) {
                flag = false;
                e.printStackTrace();
            }
        }

    }
}

服务器

public static void main(String[] args) {
        final boolean flag = true;
        try {
            ServerSocket server = new ServerSocket(20001);
            System.out.println("Server start...");

            new Thread() {
                public void run() {
                    while (flag) {
                        try {
                            Socket client = server.accept();
                            client.setKeepAlive(true);
                            System.out.println("Client connect...");
                            client.setSoTimeout(1000000);

                            DataInputStream reader = new DataInputStream(client.getInputStream());
                            DataOutputStream writer = new DataOutputStream(client.getOutputStream());

                            while (flag) {
                                System.out.println("客户端: " + reader.readUTF() + " | " + new Date(System.currentTimeMillis()));
                                writer.writeUTF("你好客户端");
                            }

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

            e.printStackTrace();
        }
    }
时间: 2024-10-05 23:27:07

2016-7-30 TextView自动下滚,以及TCP Client,(更新壹)的相关文章

软件工程 2016.6.30 日报

软件工程 2016.6.30 日报 今天主要学习的内容是C# socket网络编程中的TCP通讯技术.socket编程的原理如下: 在服务端的处理流程为: (1)建立服务器端的Socket,开始侦听整个网络中的连接请求. (2)当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接. (3)当完成通信后,服务器关闭与客户端的Socket连接. 在服务端的处理流程为: (1)建立客户端的Socket,确定要连接的服务器的主机名和端口. (2)发送连接请求到服务器,

个人日志-2016.6.30

姓名 刘鑫 时间 2016.6.30 学习内容 1.   小组汇报工作和讨论 2.   学习使用百度API离线地图 添加所需要的jar包: i 在application中添加开发密钥: <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="WqnqPEMenRrCOiF7nrDhHdkKfipidIr7" />     添加所需权限: 所遇问题 错误原因:包中没有出现的 2.错

软件工程个人日报 2016/6/30

软件工程个人日报 2016/6/30 今天我主要学习了C#WPF的Canvas和总体构想了一下新增的吐槽墙功能的实现UI设计. Canvas为容器控件,用于定位,并可以通过Visibility属性控制是否显示Canvas中的内容.通过使用Canvas控件,我可以在一个窗口里切换不同界面,完成吐槽墙界面与成绩查询界面的转换. 例如: <Canvas x:Name="userRegisterCanvas" Margin="5,5,580,400" Visibili

市面上未见FRI.Device.Rating.Program.V3.0.0.742+PipeFlow.Expert.2016.v7.30专业

FRI.Device.Rating.Program.V3.0.0.742美国精馏公司开发的化工软件     美国精馏公司开发的化工软件,市面上未见,会员拥有,可用于塔板(筛板, 浮阀)的严格的水力学计算   这是一个重大的改革,将使更多的DRP可持续升级程序.周五是规划的重大改进,继续为我们的会员提供价值. DLL转换项目成员的批准以便未来修改的新模型和功能添加DRP.QQ:16264558      TEL:13963782271   在DRP 3,计算引擎(DLL)进行了简化,并重新编写的C

Android:TextView 自动滚动(跑马灯) (转)

Android:TextView 自动滚动(跑马灯) TextView实现文字滚动需要以下几个要点: 1.文字长度长于可显示范围:android:singleLine="true" 2.设置可滚到,或显示样式:android:ellipsize="marquee" 3.TextView只有在获取焦点后才会滚动显示隐藏文字,因此需要在包中新建一个类,继承TextView.重写isFocused方法,这个方法默认行为是,如果TextView获得焦点,方法返回true,失

2016.10.30 对时间的感悟

2016.10.30 对时间的感悟 时间的单位是什么,年,月日,时,分秒? 对于我们来说时间应该是这辈子,然后被我们 切割成一个个时间段,这很有意思, 其实我想说, 有时候我们感觉来不及, 我们很烦躁, 我们快乐不起来, 可能是因为我们没有在自己规定的时间段完成规定的目标, 我们希望小孩上好的学校, 希望工资高点, 希望今天公安局办理身份证的人员有上班等等, 当我们完不成目标的时候就会有各种不良反应, 不是说有目标不好,有目标是很好的,这没毛病, 问题是我们在不够了解这个世界的规则的情况下常常高

【谜客帝国】第78届月思主擂谜会(2016.06.30)

[谜客帝国]第78届月思主擂谜会(2016.06.30) 主持:瓷 计分:手手 1.“卧听疏雨落椒房”(12笔字)渥/月思 [注:面出<明诗杂抄>佚名作<拟宫体旧题>.] 2. 克用之子灭后梁(8笔字)林/月思 [注:典据<五代史>:李存勖灭后梁,实现其父李克用遗愿.] 3. 北宋五鬼,王相占先(2字漫画家)米二/月思 [注:典据<宋史·王钦若传>,“宰相恤恩,未有钦若比者……与丁谓.林特.陈彭年.刘承珪,时谓之‘五鬼’,奸邪险伪.”] 4.“经年多病自心惊

[Python 网络编程] TCP Client (四)

TCP Client 客户端编程步骤: 创建socket对象 连接到服务端的ip和port,connect()方法 传输数据 使用send.recv方法发送.接收数据 关闭连接,释放资源 最简单的客户端: #TCP Client客户端 import socket client = socket.socket() client.connect(('127.0.0.1',9999)) client.send("Hi, I'm client1.".encode()) client.close

STM32F407移植contiki2.6后使用LWIP库实现tcp client

最近在做智能家居,物联网项目,用到了C下的contiki移植 经过一阵调试,终于在 STM32F407移植contiki2.6后使用LWIP库实现tcp client. 一路艰辛谁人知道....唯有留下代码以资青春 #include "main.h" #include "contiki.h" #include "sys\autostart.h" void led_init(); #define SYSTEMTICK_PERIOD_MS 10 #d