解决方案 »

  1.   

    你这在主线程调用网络连接会报错的,不能在主线程操作,需要启动一个线程来操作,请求的方法
    HttpPost request = new HttpPost(url);
                // 设置参数的编码
                request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); 
                
                HttpParams httpParameters = new BasicHttpParams();
                //连接超时时间
                HttpConnectionParams.setConnectionTimeout(httpParameters, 30000);  
                //读取连接超时时间
                HttpConnectionParams.setSoTimeout(httpParameters, 30000);
                
                // 发送请求并获取反馈
                HttpResponse httpResponse = new DefaultHttpClient(httpParameters).execute(request); 
    需要url和params携带的请求数据,如果没有就为null
      

  2.   

    太复杂了,能不能给个完整的代码段;
    我只想通过MainActivity创建一个连到Server的socket,然后发个消息,并能接收服务器的返回消息,如果都在MainActivity内写是可以实现,只是想把Socket写成一个通用的类,可以在其它的类内也可以调用并接收返回数据;
      

  3.   

    建议使用Selector和SocketChannel,具体怎么用就请百度下,一两句话是说不清,还有就算你在MainActivity中调用这个Socket类,也需要在子线程中调用。
      

  4.   

    没有一个热心的大侠肯耐心解释一下吗?大家上CSDN都这么吝啬,以后都没有人肯来了;
      

  5.   

    其实我想说我也不懂,不过,如果要详细说的话,几页都说不完,首先android的sokect和java的一模一样,没啥特别的地方,除了一个地方,你要启动service进行长连接,如果不懂你真的可以百度下,网上很多详解
      

  6.   

    public static void sendSocketMsg(String ip,String msg) throws IOException 
    {
    Socket socket = new Socket(ip,1992);//新建一个SOCKET以IP为地址,1992作为端口号
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));//新建一个writer放置在socket的发送端
    writer.write(msg);//将msg信息发送出去
    writer.flush();
    writer.close();
    socket.close();
    }再要用的类里面实例化一下Senter msenter=new Senter();然后就可以msenter.sendSocketMsg(IP.ip, key);
      

  7.   

    给你个地址,去看看学学吧 http://www.marschen.com/portal.php
      

  8.   

    android客户端通过socket与服务器进行通信可以分为以下几步:
    应用程序与服务器通信可以采用两种模式:TCP可靠通信 和UDP不可靠通信。
    (1)通过IP地址和端口实例化Socket,请求连接服务器:
         socket = new Socket(HOST, PORT);   //host:为服务器的IP地址  port:为服务器的端口号
    (2)获取Socket流以进行读写,并把流包装进BufferWriter或者PrintWriter:
       PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);  
       这里涉及了三个类:socket.getOutputStream得到socket的输出字节流,OutputStreamWriter是字节流向字符流转换的桥梁,BufferWriter是字符流,然后再包装进PrintWriter。
    (3)对Socket进行读写
         if (socket.isConnected()) {
                        if (!socket.isOutputShutdown()) {
                            out.println(msg);
                        }
                    }
    (4)关闭打开的流
          out.close();
     在写代码的过程中一定要注意对socket  输入流  输出流的关闭
     
    下面是一个简单的例子:
    main.xml
    [html] view plaincopy
    <?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">    
        <TextView   
            android:id="@+id/TextView"   
            android:singleLine="false"    
            android:layout_width="fill_parent"    
            android:layout_height="wrap_content" />    
        <EditText android:hint="content"   
            android:id="@+id/EditText01"    
            android:layout_width="fill_parent"    
            android:layout_height="wrap_content">    
        </EditText>    
        <Button   
            android:text="send"   
            android:id="@+id/Button02"    
            android:layout_width="fill_parent"    
            android:layout_height="wrap_content">    
        </Button>    
    </LinearLayout>   
    下面是android客户端的源代码:
    [java] view plaincopy
    package com.android.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 SocketDemo 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.223";  
        private static final int PORT = 9999;  
        private Socket socket = null;  
        private BufferedReader in = null;  
        private PrintWriter out = null;  
        private String content = "";  
      
        /** 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.EditText01);  
    //        btn_login = (Button) findViewById(R.id.Button01);  
            btn_send = (Button) findViewById(R.id.Button02);  
      
            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 v) {  
                    // TODO Auto-generated method stub  
                    String msg = ed_msg.getText().toString();  
                    if (socket.isConnected()) {  
                        if (!socket.isOutputShutdown()) {  
                            out.println(msg);  
                        }  
                    }  
                }  
            });  
            new Thread(SocketDemo.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 dialog, int which) {  
                            // TODO Auto-generated method stub  
      
                        }  
                    }).show();  
        }  
      
        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);  
            }  
        };  
    }  下面是服务器端得java代码:
    [java] view plaincopy
    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.ServerSocket;  
    import java.net.Socket;  
    import java.util.ArrayList;  
    import java.util.List;  
    import java.util.concurrent.ExecutorService;  
    import java.util.concurrent.Executors;  
      
      
    public class Main {  
        private static final int PORT = 9999;  
        private List<Socket> mList = new ArrayList<Socket>();  
        private ServerSocket server = null;  
        private ExecutorService mExecutorService = null; //thread pool  
          
        public static void main(String[] args) {  
            new Main();  
        }  
        public Main() {  
            try {  
                server = new ServerSocket(PORT);  
                mExecutorService = Executors.newCachedThreadPool();  //create a thread pool  
                System.out.print("server start ...");  
                Socket client = null;  
                while(true) {  
                    client = server.accept();  
                    mList.add(client);  
                    mExecutorService.execute(new Service(client)); //start a new thread to handle the connection  
                }  
            }catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
        class Service implements Runnable {  
                private Socket socket;  
                private BufferedReader in = null;  
                private String msg = "";  
                  
                public Service(Socket socket) {  
                    this.socket = socket;  
                    try {  
                        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
                        msg = "user" +this.socket.getInetAddress() + "come toal:"  
                            +mList.size();  
                        this.sendmsg();  
                    } catch (IOException e) {  
                        e.printStackTrace();  
                    }  
                      
                }  
      
                @Override  
                public void run() {  
                    // TODO Auto-generated method stub  
                    try {  
                        while(true) {  
                            if((msg = in.readLine())!= null) {  
                                if(msg.equals("exit")) {  
                                    System.out.println("ssssssss");  
                                    mList.remove(socket);  
                                    in.close();  
                                    msg = "user:" + socket.getInetAddress()  
                                        + "exit total:" + mList.size();  
                                    socket.close();  
                                    this.sendmsg();  
                                    break;  
                                } else {  
                                    msg = socket.getInetAddress() + ":" + msg;  
                                    this.sendmsg();  
                                }  
                            }  
                        }  
                    } catch (Exception e) {  
                        e.printStackTrace();  
                    }  
                }  
                
               public void sendmsg() {  
                   System.out.println(msg);  
                   int num =mList.size();  
                   for (int index = 0; index < num; index ++) {  
                       Socket mSocket = mList.get(index);  
                       PrintWriter pout = null;  
                       try {  
                           pout = new PrintWriter(new BufferedWriter(  
                                   new OutputStreamWriter(mSocket.getOutputStream())),true);  
                           pout.println(msg);  
                       }catch (IOException e) {  
                           e.printStackTrace();  
                       }  
                   }  
               }  
            }      
    }  注意在AndroidManifest.xml中加入对网络的访问权限
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>