android 设备上的应用程序与 PC netbeans java 服务器之间的数据传输
Data transfer between android app on device to PC netbeans java server
美好的一天,我正在开发一个 android 应用程序来将 textView 值发送到在 Java netbeans 中制作的服务器,我遵循了 YouTube [https://www.youtube.com/watch?v=29y4X65ZUwE ] 上的教程,但是当我运行 服务器首先不发送数据。我也连接到同一个 Wi-Fi 网络。
编辑:当我在 Java 中的服务器 class 中使用代码 System.out.println(ss.getInetAddress());
时,我得到 0.0.0.0
作为 ip 地址,但我已连接到 wifi网络。
这是我的 AsyncTask class(在 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 class,在 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 phone:
发送的数据
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();
}
}
我们将不胜感激任何建议和帮助。
同时检查 Windows 防火墙是否阻止通信。
尝试逐个字符地读取,因为逐行读取可能会阻塞。
检查:BufferedReader, detecting if there is text left to read
美好的一天,我正在开发一个 android 应用程序来将 textView 值发送到在 Java netbeans 中制作的服务器,我遵循了 YouTube [https://www.youtube.com/watch?v=29y4X65ZUwE ] 上的教程,但是当我运行 服务器首先不发送数据。我也连接到同一个 Wi-Fi 网络。
编辑:当我在 Java 中的服务器 class 中使用代码 System.out.println(ss.getInetAddress());
时,我得到 0.0.0.0
作为 ip 地址,但我已连接到 wifi网络。
这是我的 AsyncTask class(在 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 class,在 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 phone:
发送的数据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();
}
}
我们将不胜感激任何建议和帮助。
同时检查 Windows 防火墙是否阻止通信。
尝试逐个字符地读取,因为逐行读取可能会阻塞。 检查:BufferedReader, detecting if there is text left to read