当前位置: 首页 > 知识库问答 >
问题:

android-LAN套接字编程-获取nullpointer和地址使用异常

孟思远
2023-03-14

我做了一个应用程序,其中android应用程序将数据发送到java桌面摇摆应用程序,以及通过wifi使用TCP套接字编程将数据从桌面发送到android。

该应用程序是一个酒店厨房订单预订系统

该问题描述了Dine\u Tables类包含表示酒店中每个桌子的按钮,例如,单击table1按钮时,它会启动BackgroundServers Asyntask,它运行服务器以接收桌面应用程序数据,还从Dinein\u Tables中获取活动。java到Food\u Customizer。java。

Food_Customizer.java点击提交按钮,它会启动ServersendAsyncActionAsyn任务,它会将一些数据发送到桌面摇摆应用程序。

处理后的桌面应用程序将一些数据发送到android应用程序,android应用程序中运行的服务器在接收数据时再次从Food\u Customizer发送。java到Dinein\u表。BackgroundServers中的java活动Asyntask方法。

问题是,当我做这个过程的两到三次的应用程序停止由于地址在使用和空指针异常套接字=serverSocket.accept();在Background ServersAsynask.

谁能告诉我这个问题的解决方法吗

Dinein\u桌子。Java语言

public class Dinein_Tables extends Activity {
:
:


 table1.setOnClickListener(new OnClickListener() {

                    public void onClick(final View v) {
                        new Handler().postDelayed(new Runnable() {

                            public void run() {

                                        Food_Customizer.BackgroundServers ob = new Food_Customizer().new BackgroundServers(contexts);
                                        ob.execute("");
                                      Intent toAnotherActivity = new Intent(v.getContext(), Food_Customizer.class);
                                      startActivity(toAnotherActivity);
                                      finish();
                            }

                        }, 100L);    

                    }

                });
}

Food_Customizer.java

public class Food_Customizer extends Activity {
:
:
    submit= (Button)findViewById(R.id.submit);
    submit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
          pd = ProgressDialog.show(contexts, "Sending to Server...","Please Wait...", true, false);
          new ServersendAsyncAction().execute();
    }
    });
:
:



      /****************************** AsyncTask ********************************************************/

        private class ServersendAsyncAction extends AsyncTask<String, Void, String> {

            /****************************** AsyncTask doInBackground() ACTION ********************************/
            protected String doInBackground(String... args) {


                Socket socket = null;
                DataOutputStream dataOutputStream = null;
                DataInputStream dataInputStream = null;
                boolean flag = true;
                while (flag) /******** If data is send flag turn to be false *******/
                {
                    try {
                        socket = new Socket("192.168.1.74", 4444);
                        dataOutputStream = new DataOutputStream(socket.getOutputStream());
                        dataInputStream = new DataInputStream(socket.getInputStream());
                        dataOutputStream.writeUTF(datastosend);
                        flag = false;
                        } catch (UnknownHostException e) {
                        flag = true;
                        e.printStackTrace();
                        } catch (IOException e) {
                        flag = true;
                        e.printStackTrace();
                        }

                    /******** CLOSING SOCKET *****************/
                    finally {
                        if (socket != null) {
                            try {
                                socket.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                        /******** CLOSING DATAOUTPUTSTREAM *******/
                        if (dataOutputStream != null) {
                            try {
                                dataOutputStream.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                        /******** CLOSING DATAINPUTSTREAM ********/
                        if (dataInputStream != null) {
                            try {
                                dataInputStream.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
                return null;
                /******** returns what you want to pass to the onPostExecute() *******/
            }

            /****************************** AsyncTask onPostExecute() ACTION *********************************/
            protected void onPostExecute(String result) {

            }

        /********************* ENDING OF ASYN TASK CLASS ServersendAsyncAction ***************************/
        }



        public Context con;
            public static ServerSocket serverSocket = null;

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

            public BackgroundServers(Context context) {
                con=context;
            }

            /****************************** AsyncTask doInBackground() ACTION ********************************/
            protected  String doInBackground(String... args) {

                Socket socket = null;
                DataInputStream dataInputStream = null;
                DataOutputStream dataOutputStream = null;

                try {
                    serverSocket = new ServerSocket(9999);
                    System.out.println("Listening :9999");
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                while (true) {
                    try {
                        socket = serverSocket.accept();
                        dataInputStream = new DataInputStream(
                        socket.getInputStream());
                        dataOutputStream = new DataOutputStream(socket.getOutputStream());
                        System.out.println("ip: " + socket.getInetAddress());
                        String incoming_message=(dataInputStream.readUTF());
                        incoming_message=incoming_message.replace("/", "");
                        String recdatas[]=incoming_message.split("#");
                        if(recdatas[0].equalsIgnoreCase("success"))
                        {
                          DatabaseConnection dbs=new DatabaseConnection(con);
                          int status=dbs.update("UPDATE hotel_pub_tables SET status='occupied' WHERE tableno='"+recdatas[1]+"'");
                          if(status>0)
                                  {
                              tabelstatus=1;
                              //msg.obj="Table status changed!!!";
                              System.out.println("Table status changed!!!");
                              if (true) {
                                    System.out.println("entered 222");

                                               System.out.println(tabelstatus);
                                               if(tabelstatus==1)
                                                {
                                                   System.out.println(tabelstatus); 
                                                   Food_Customizer.pd.dismiss();
                                                   System.out.println("success"); 

                                                }
                                                else if(tabelstatus==2)
                                                {
                                                    Food_Customizer.pd.dismiss();

                                                  Intent intent = new Intent(Food_Customizer.this, Dinein_Tables.class);
                                                  startActivity(intent);
                                                  finish(); 
                                                }

                                }
                          }
                          else
                              tabelstatus=2;
                          dbs.close();
                        }
                        dataOutputStream.writeUTF("Hello!");
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        if (socket != null) {
                            try {
                                socket.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }

                        if (dataInputStream != null) {
                            try {
                                dataInputStream.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }

                        if (dataOutputStream != null) {
                            try {
                                dataOutputStream.close();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }

                    }
                             return null;
                }

                /******** returns what you want to pass to the onPostExecute() *******/
            }

            /****************************** AsyncTask onPostExecute() ACTION *********************************/
            @Override
            protected void onPostExecute(String result) {
                System.out.println("eneterd on posttttttttttttttt");
                con.startActivity(new Intent(con, Dinein_Tables.class));
                finish();
                }

            }
        }
        /********************* ENDING OF ASYN TASK CLASS BackgroundServers ***************************/
}

共有1个答案

仰雅昶
2023-03-14

很明显,您将服务器设置在端口9999上:

serverSocket = new ServerSocket(9999);

但您在端口4444上连接服务器:

socket = new Socket("192.168.1.74", 4444);

确保连接到正确的端口号,否则它将无法工作。希望这有帮助。

 类似资料:
  • 问题内容: 我想获取启动程序的计算机的IP地址,然后将其发送到客户端,但是我总是得到0.0.0.1而不是真实的IP地址(例如127.0.0.1)。 我目前可以获取端口,但无法获取IP地址。 我怎么才能得到它? 最好的解决方案是能够使用。这是我目前正在做的事情: 编辑: 我知道我的思维方式走错了路。所以我的问题是:获得自己的IP地址的最佳方法是什么? 问题答案: 当您将套接字设为0.0.0.0时,这

  • 问题内容: 所以我的Android Gallery中有3个文件夹。我正在尝试将这些文件夹的文件读入File数组,然后从那里将图像源转换为real 。 我的问题是引用文件数组时遇到问题。这是一些代码: 使用这些图像文件数组… 我的CreateList方法。错误是当我引用list.length时。 就像我说的那样,错误是当我使用list.length引用一个File数组时,例如我在第一个代码段中创建的

  • 问题内容: 我知道对此问题的最初反应是“否”和“无法完成”,并且“您不需要它,您做错了什么”。我正在尝试获取用户的LAN IP地址,并将其显示在网页上。为什么?因为这就是我正在处理的页面的全部内容,因此会显示有关您的尽可能多的信息 因此,除了向用户展示以供参考之外,我实际上并没有对IP做任何事情。我曾经通过使用一个小的Java小程序来做到这一点。效果很好。但是这些天来,浏览器让您多次达成共识和信任

  • 我是Java和JavaFX的新手,所以请原谅我的新手问题。在过去的几天里,我一直在寻找我正在努力做的事情的例子,但是没有找到任何答案。下面是我正在尝试做的:我试图创建一个简单的javafx GUI客户端套接字应用程序,使用场景生成器连接到服务器并发送/接收数据。很简单,但是当我试图在JavaFX中实现它时,我的图形用户界面冻结了。我研究发现,原因是套接字通信占用了所有的时间,javafx GUI无

  • 问题内容: 如何仅使用 proc 获得所有网络接口的(IPv4)地址?经过广泛的调查,我发现了以下内容: 使用,需要打开套接字并充分了解所有接口名称。在Linux上的任何手册页中也没有记录。 包含,但这是接口统计信息的列表。 包含,这正是我需要的,但需要IPv6。 通常,在中很容易找到接口,但是很少使用实际地址,除非在某些连接中有明确的一部分。 有一个名为的系统调用,这是Windows所期望的非常

  • 这就是我有点困惑的地方。 我在服务器端拿到的地址,有客户端连接的WiFi网络的公有地址(这是我预期的),还有一些端口号,基于我对NATs的理解,应该和客户端实际使用的端口号不一样,是用来翻译地址的。 但是,如果我在客户端上使用了getsockname()函数,则得到的端口号与服务器给出的端口号相同。