android socket编程client

一个android通信的客户端实例,力求代码简洁,程序完善。
复制粘贴之后可直接运行

activity篇:

package com.mysocket.androidclient;

import java.io.*;
import java.net.InetSocketAddress;
import java.net.Socket;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

    private Socket mSocket;
    private OutputStream mOut;

    private TextView mMsgView = null;    //发送信息和接收信息的文本框
    private EditText mMsgSend = null;    //定义发送信息的文本框
    private Button mBtnConnect = null;   //定义一个连接按钮
    private Button mBtnSend = null;     //定义发送信息的按钮

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

        //获得UI的实例
        mMsgView = (TextView) findViewById(R.id.textView_socketMsg);
        mBtnConnect = (Button) findViewById(R.id.btn_connect);
        mBtnSend = (Button) findViewById(R.id.btn_send);
        mMsgSend = (EditText) findViewById(R.id.editText_send);

        //点击“连接”按钮,建立socket连接
        mBtnConnect.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                new Thread(new MyClientThread()).start();
                mBtnConnect.setText("已   连   接");
            }
        });

        //发送信息
        mBtnSend.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                try {
                    String sendStr = mMsgSend.getText().toString();
                    mOut.write((sendStr + "\n").getBytes());
                    mMsgSend.setText("");

                    Message send = new Message();
                    send.obj = "客户端:\n\t\t" + sendStr;
                    mHandler.sendMessage(send);

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

    }

    public Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            mMsgView.append(msg.obj.toString() + "\n");
        }
    };

    class MyClientThread implements Runnable {

        @Override
        public void run() {
            try {
                // 建立socket连接,获取输入输出流
                mSocket = new Socket();
                mSocket.connect(new InetSocketAddress("113.251.218.119", 8080),
                        50000);
                mOut = mSocket.getOutputStream();
                BufferedReader in = new BufferedReader(new InputStreamReader(
                        mSocket.getInputStream()));

                // 读取发来服务器信息
                String line = null;
                while ((line = in.readLine()) != null) {
                    Message reveived = new Message();
                    reveived.obj = "服务器端:\n\t" + line;
                    mHandler.sendMessage(reveived);
                }

                // 关闭各种输入输出流
                in.close();
                mOut.close();
                mSocket.close();

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }
}

布局文件

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/editText_send"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:inputType="textMultiLine" >
            <requestFocus />
        </EditText>

        <Button
            android:id="@+id/btn_send"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:text="发 送" />
    </LinearLayout>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
         android:layout_weight="1">

        <TextView
            android:id="@+id/textView_socketMsg"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:isScrollContainer="true"
            android:text="" />
    </ScrollView>

    <Button
         android:layout_weight="0"
        android:id="@+id/btn_connect"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="点 击 连 接" />

</LinearLayout>

最后,别忘了加访问网络的权限

     <uses-permission android:name="android.permission.INTERNET"/>

猜你喜欢

转载自blog.csdn.net/u010503121/article/details/44864233