解决方案 »

  1.   

    这个会很复杂的一个需求吗?还是论坛里都没有人气?连个顶的人都没有,有点像CSDN快要倒的节奏;
      

  2.   


    支持楼主吧。代码仅供参考。不过肯定是能正常运行的。
    手机端:package com.example.testandroidtcp;import java.io.BufferedReader;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.Socket;
    import java.net.UnknownHostException;import android.app.Activity;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;
    import android.view.*;
    import android.widget.*;
     
    public class MainActivity extends Activity {
     
        private TextView tv;
        private Handler handler ;
        private String ip;
        private int port;
        private boolean isFirst=true;
        private Button send;
        private TextView st;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
          
          this.setContentView(R.layout.main_activity);
          handler=new Handler();
          
          st=(TextView)this.findViewById(R.id.st_label);//放发送成功与否状态的。
          
          send=(Button)this.findViewById(R.id.send);// 发送按钮
          //通过网络发亲家文本数据的事件
          send.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub

    //网络操作必须要通过其它线程完成。不允许在GUI主线程做。否则操作自然失败。
     Thread thread = new MyThread(MainActivity.this, handler);
            thread.start();
    }
    });
          
          
           
        }//onCreate 
    class MyThread extends Thread{
        private MainActivity ctx;
        Handler hd;
        Socket s=null;
        
        public MyThread(MainActivity ctx,Handler hd){
            this.ctx = ctx;
            this.hd=hd;
        }
        public void run(){
        
         ctx.isFirst=false;
         //获取输入的远方服务器的IP地址
         ctx.ip=((EditText)(ctx.findViewById(R.id.et_ip))).getText().toString();
         //获取输入的远方服务器的port
         ctx.port=Integer.parseInt(
         ((EditText)(ctx.findViewById(R.id.et_port))).getText().toString()
         );
         //向远方发起TCP连接
         try {
    s=new Socket(ctx.ip,ctx.port);
    //获取要发送的字符串
    String data=((EditText)(ctx.findViewById(R.id.et_text))).getText().toString();
    DataOutputStream dos=new DataOutputStream(s.getOutputStream());
    //将字符串按:UTF-8字节流方式传输。先传输长度,再传输字节内容。
    dos.writeUTF(data);
    dos.flush();
    dos.close();
    dos.close();
    s.close();
    hd.post(new Runnable() {

    @Override
    public void run() {
    // TODO Auto-generated method stub
    ctx.st.setTextColor(Color.GREEN);
    ctx.st.setText("发送成功!");
    }
    });


    } catch (Exception e1){
    // TODO Auto-generated catch block
    //e1.printStackTrace();
    final String errMsg=e1.getMessage();
                    hd.post(new Runnable() {

    @Override
    public void run() {
    // TODO Auto-generated method stub
    ctx.st.setTextColor(Color.RED);
    ctx.st.setText("发送成失败:"+errMsg);
    }
    });

    }//try
        
        
        
           
        }//run
         
    }//MyThread
    }//MainActivity
    配置文件:注意要有网络权限。AndroidManifest.xml
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.testandroidtcp"
        android:versionCode="1"
        android:versionName="1.0" >    <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="16" />
       <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>    <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
          
            <activity
                android:name="com.example.testandroidtcp.MainActivity"
                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></manifest>布局文件:main_activity.xml
    <?xml version="1.0"  encoding="utf-8" ?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >   <TextView
           android:id="@+id/ip_label"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="IP地址:"
           android:textSize="24sp" 
           android:layout_marginBottom="20dp"/>   <EditText 
           android:id="@+id/et_ip"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
          
           android:textSize="24sp"
            android:layout_marginBottom="20dp"
           />    <TextView
            android:id="@+id/port_label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
          
           
            android:text="端口号:"
            android:textSize="24sp"
            android:layout_marginBottom="20dp"
              />   <EditText
           android:id="@+id/et_port"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
          
          
          
           android:textSize="24sp"
            android:layout_marginBottom="20dp"
             /> <TextView
         android:id="@+id/text_label"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
       
         android:text="切发送的文本:"
         android:textSize="24sp"
          android:layout_marginBottom="20dp"
           />   <EditText   
           android:id="@+id/et_text"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
         
          
           android:textSize="24sp"
            android:layout_marginBottom="20dp"
            
           />
       <TextView
         android:id="@+id/st_label"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
       
         android:text=""
         android:textSize="24sp"
          android:layout_marginBottom="20dp"
          android:textColor="#FFFF0000"
           />
       
       <Button android:id="@+id/send"  
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text=" 发 送 "
           android:layout_centerInParent="true"
           />
           
    </LinearLayout>
    TCP服务器代码:package njnu.java.tcpserver;import java.io.DataInputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    public class SimpleTCPServer {
    static int port=9999;
        public static void main(String[] args) throws IOException {
            ServerSocket ss = new ServerSocket(port);  
            
            boolean again=true;
            while(again){  
             System.out.println("TCP 服务器在"+port+"上等待连接...");
            Socket s = ss.accept();
            System.out.println("客户机IP:"+s.getInetAddress()+" 端口号: "+s.getPort()+" 已连接进来。");
            DataInputStream dis=new DataInputStream(s.getInputStream());
            //读取用户发送的数据       
            String data=dis.readUTF();
            System.out.println("客户发送的数据是:"+data);
            dis.close();
            s.close();
            }
        }
    }