【问题标题】:Data transfer between android app on device to PC netbeans java server设备上的 android 应用程序到 PC netbeans java 服务器之间的数据传输
【发布时间】:2019-06-19 04:11:48
【问题描述】:

美好的一天,我正在开发一个 android 应用程序来将 textView 值发送到用 Java netbeans 制作的服务器,我按照 YouTube [https://www.youtube.com/watch?v=29y4X65ZUwE] 上的教程进行操作,但是当我首先运行服务器时,它不会发送数据。我也连接到同一个 Wi-Fi 网络。

编辑:当我在 Java 的服务器类中使用代码 System.out.println(ss.getInetAddress()); 时,我得到 0.0.0.0 作为 IP 地址,但我已连接到 wifi 网络。

这是我的 AsyncTask 类(在 android studio 中编写):

public class SendData extends AsyncTask<String, Void, Void> {

Socket s;
DataOutputStream dos;
PrintWriter pw;

@Override
protected Void doInBackground(String... voids) {

    String number = voids[0];
    try{

        s = new Socket("196.248.139.178", 6000);

        pw = new PrintWriter(s.getOutputStream());
        pw.write(number);
        pw.flush();
        pw.close();
        s.close();

    }catch(IOException ioe){

        ioe.printStackTrace();
    }
    return null;
  }
}

这是我的 MainActivity(称为 Orders 类,用 android studio 编写):

public class Orders extends AppCompatActivity {

Button  send;
EditText orderNum;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_orders);

    orderNum = findViewById(R.id.orderNum);

    send = findViewById(R.id.send);

    send.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            SendData numSender = new SendData();
            numSender.execute(orderNum.getText().toString());

        }
    });
  }
}

以下是我用 NetBeans 编写的服务器代码,它包括一个带有 JTextArea 的 JFrame,用于显示从 android 手机发送的数据:

public class OrderList extends javax.swing.JFrame {

static Socket s;
static ServerSocket ss;
static InputStreamReader isr;
static BufferedReader br;
static String numbers;


/**
 * Creates new form OrderList
 */
public OrderList() {

    initComponents();   
}
public static void main(String args[]) {

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new OrderList().setVisible(true);
        }
    });

     try{

         ss = new ServerSocket(6000);
         while(true){

             s = ss.accept();
             isr = new InputStreamReader(s.getInputStream());
             br = new BufferedReader(isr);
             numbers = br.readLine();

             System.out.println(numbers);
             // orderNumList is the text area where data is going to be set.
             if(orderNumList.getText().equals("")){

                 orderNumList.setText(numbers);
             }
             else{
                 orderNumList.setText(orderNumList.getText()+ "\n" + numbers);

             }

         }

     }catch(IOException e){

         e.printStackTrace();
     }
}

我们将不胜感激任何建议和帮助。

【问题讨论】:

  • 您是否收到任何异常或任何输出?如果有,请提供。
  • @NikaNarushvili 不幸的是,我没有收到任何异常或输出。它也不会崩溃。我手机上的应用程序和服务器都保持原样。
  • 您正在使用 PrintWriter 和 BufferedReader,所以您确定您的 orderNum.getText().toString() 方法返回一个以 \n\r 终止的字符串吗?
  • @L.Spillner 抱歉回复评论太晚了,我无法上网。但是,是的,它确实以 '\n' 终止
  • 以下主题似乎是您旁边的问题:stackoverflow.com/questions/33841741/…

标签: java android sockets client-server


【解决方案1】:

尝试逐字符读取,因为逐行读取会阻塞。 检查:BufferedReader, detecting if there is text left to read

【讨论】:

  • 我在br = new BufferedReader(isr); 下添加了while(br.ready()),然后我使用了readLine,但是没有运气,仍然没有发送数据,我正在我的android 设备上运行该应用程序。
  • 另外请你告诉ioe.printStackTrace()显示的异常是什么; ?
  • 我设法通过使用手机上的热点使其正常工作。我连接到 wifi 热点,该热点阻止了他们服务器的某些端口。这是一个简单的问题,但这解决了我的问题。谢谢大家的建议和帮助。
  • 好的!不客气。所以这是一种防火墙问题。很高兴你解决了它!
【解决方案2】:

同时检查 Windows 防火墙是否不会阻止通信。

【讨论】:

  • 我已将防火墙设置为允许端口 (6000) 通过,但服务器未获取值。
猜你喜欢
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-13
相关资源
最近更新 更多