Android Socket通讯

来源:互联网 发布:memcache 教程php 编辑:程序博客网 时间:2024/05/20 08:41

最近由于工作需要,自己编写了android的客户端与PC的服务器进行通讯,使用SOCKET

1.新版本的android不能在主线程中进行SOCKET操作,需要新开一个线程。

2.权限问题:需要在***Manifest.xml文件中添加 <uses-permission android:name="android.permission.INTERNET"></uses-permission>

    权限。  一开始我添加application标签中,程序一直报权限问题,后来我仔细看了看别人的例子,权限是添加在application标签的外面。具体如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="gcy.SocketDemo"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".SocketDemoActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
     <uses-permission android:name="android.permission..ACCESS_COARSE_LOCATION"></uses-permission>
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>



客户端android代码:

package gcy.SocketDemo;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
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;

public class SocketDemoActivity extends Activity implements Runnable{
    
    private TextView tv_msg = null;
    private EditText ed_msg = null;
    private Button btn_send = null;
    //private Button btn_login = null;
    private static final String HOST = "192.168.1.103";
    private static final int PORT =2000;
    private Socket socket = null;
    private BufferedReader in = null;
    private PrintWriter out = null;
    private String content = "";
    /*Called when the activity is first created*/
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        tv_msg = (TextView)findViewById(R.id.textView);
        ed_msg = (EditText)findViewById(R.id.editText1);
        btn_send=(Button)findViewById(R.id.button1);
        
        try
        {
            socket = new Socket(HOST,PORT);
            in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
        }
        catch(IOException ex)
        {
            //ex.printStackTrace();
            ShowDialog("login exception"+ex.getMessage());
        }
       btn_send.setOnClickListener(new Button.OnClickListener()
       {
        @Override
        public void onClick(View arg0) {
            String msg = ed_msg.getText().toString();
            if(socket.isConnected())
            {
                if(!socket.isOutputShutdown())
                {
                    out.println(msg);
                }
            }
        }
           
       });
       new Thread(SocketDemoActivity.this).start();
    }
    
    public void ShowDialog(String msg)
    {
        new AlertDialog.Builder(this).setTitle("notification").setMessage(msg)
        .setPositiveButton("ok",new DialogInterface.OnClickListener() {
            
            @Override
            public void onClick(DialogInterface arg0, int arg1) {
                // TODO Auto-generated method stub
                
            }
        }).show();
    }

    @Override
    public void run() {
        try{
            while(true)
            {
                if(socket.isConnected())
                {
                    if(!socket.isInputShutdown())
                    {
                        if((content=in.readLine())!=null)
                        {
                            content+="\n";
                            mHandler.sendMessage(mHandler.obtainMessage());
                        }
                        else
                        {
                            
                        }
                    }
                }
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    public Handler mHandler = new Handler()
    {
        public void handleMessage(Message msg)
        {
            super.handleMessage(msg);
            tv_msg.setText(tv_msg.getText().toString()+content);
        }
    };
}


main.xml中内容:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:weightSum="1">
     <TextView android:text="TextView" android:layout_height="wrap_content" android:id="@+id/textView" android:layout_width="177dp"></TextView>
     <EditText android:layout_height="wrap_content" android:id="@+id/editText1" android:layout_width="fill_parent">
         <requestFocus></requestFocus>
     </EditText>
     <Button android:text="Button" android:id="@+id/button1" android:layout_height="wrap_content" android:layout_width="98dp"></Button>
     <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="match_parent"></ListView>
</LinearLayout>

0 0
原创粉丝点击