KGlen 2016-08-03 06:23 采纳率: 100%
浏览 1116
已采纳

Android应用Socket与PC通信失败

服务器端

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

public class TCPDesktopServer implements Runnable{


    public static final String SERVERIP = "192.168.155.1";

    public static final int SERVERPORT = 1920;


    public void run() {

         try {

             System.out.println("S: Connecting...");

             ServerSocket serverSocket = new ServerSocket(SERVERPORT);

             while (true) {

                  Socket client = serverSocket.accept();

                  try {

                      BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

                      String str = in.readLine();

                      System.out.println("S: Received: '" + str + "'");

                    } catch(Exception e) {

                        System.out.println("S: Error");

                        e.printStackTrace();

                    } finally {

                        client.close();

                        System.out.println("S: Done.");

                    }

             }

          } catch (Exception e) {

             System.out.println("S: Error");

             e.printStackTrace();
         }
    }

   public static void main (String a[]) {

        Thread ServerThread = new Thread(new TCPDesktopServer());

        ServerThread.start();
    }
}

客户端、

 package com.ldgforever.controlbywifi;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class LightControlActivity extends Activity {

    private Button mBtnSend;                
    private static final String TAG = "com.ldgforever.controlbywifi";
    private String mIPAdress;
    private int mPortNumber;
    String ip="192.168.155.1";
    int port=1920;
    Socket socket = null;

    private String mSendMsg = "test";

    public static final String EXTRA_RECEIVE_IP = 
            "com.ldgforever.controlbywifi.receive_ip";
    public static final String EXTRA_RECEIVE_PORT = 
            "com.ldgforever.controlbywifi.receive_port";    

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


      mIPAdress = getIntent().getStringExtra(EXTRA_RECEIVE_IP);
      mPortNumber = Integer.parseInt(getIntent()
               .getStringExtra(EXTRA_RECEIVE_PORT));  

      mBtnSend = (Button)findViewById(R.id.send_data);
      mBtnSend.setOnClickListener(new OnClickListener() {

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

private void SetOnClick()
{   
            // TODO Auto-generated method stub
        try {
                if(!TextUtils.isEmpty(mSendMsg))
                        SendMsg(ip,port,mSendMsg);
                else
                {
                    Toast.makeText(LightControlActivity.this,"msg is EMPTY!!", Toast.LENGTH_LONG).show();
                }
        } catch (UnknownHostException e) {
                        // TODO Auto-generated catch block
                        Toast.makeText(LightControlActivity.this,"!UnknownHostException!", Toast.LENGTH_LONG).show();
                        e.printStackTrace();
        } catch (IOException e) {
                        // TODO Auto-generated catch block
                        Toast.makeText(LightControlActivity.this,"!IOException!", Toast.LENGTH_LONG).show();
                        e.printStackTrace();
        }catch (Exception e) {   //每次都断在这里
                        // TODO Auto-generated catch block
                        Log.e(TAG, "Exception");
                        Toast.makeText(LightControlActivity.this,"!Exception!", Toast.LENGTH_LONG).show();
                        e.printStackTrace();
            }

}

public void SendMsg(String ip,int port,String msg) throws UnknownHostException, IOException
{
    try
    {
      socket = new Socket();  
      socket=new Socket(ip,port); 
      PrintWriter writer = new PrintWriter(new BufferedWriter
              (new OutputStreamWriter(socket.getOutputStream())));
//    BufferedWriter writer=new BufferedWriter(new OutputStreamWriter
//              (socket.getOutputStream()));
//      writer.write(msg);
        writer.println(msg);
        writer.flush();
        writer.close();       
        socket.close();
    }
    catch(UnknownHostException e)
    {
        Log.e(TAG, "UnknownHostException");
        e.printStackTrace();
    } catch (IOException e) 
    {
        Log.e(TAG, "IOException");
        e.printStackTrace();
    }
}
}

是通过mainactivity打开这个activity 网络权限添加了 不知道为什么客户端单拿出来写一个edittext 和button的发送小程序就好使

  • 写回答

3条回答

  • KGlen 2016-08-03 23:44
    关注

    已经解决 在这里说明一下答案 两种解决办法。。1.异步通信 2.放在thread.run()中

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示