gpt4 book ai didi

java - 将 udp 消息从 android 手机发送到 PC(windows)不工作

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:16 25 4
gpt4 key购买 nike

我想使用 WIFI 连接从我的 android 手机 4.2(客户端)向 PC(服务器)发送 UDP 消息。我的手机和电脑是通过无线路由器连接的。但是从电话到手机没有收到任何消息。我还成功测试了此代码以实现 PC 到 PC 连接。我已将 Internet 权限添加到 manifest.xml。如果你能帮助我,我会很高兴。谢谢你。我已添加此权限。

 <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

客户:

@Override
protected void onCreate(Bundle savedInstanceState)
{

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);




Button button1 = (Button) findViewById(R.id.button1);
final TextView tv = (TextView) findViewById(R.id.textView1);
final TextView tv2= (TextView) findViewById(R.id.textView2);







button1.setOnClickListener(new OnClickListener()
{

@Override
public void onClick(View v)
{

boolean morgan= isOnline();
String s = String.valueOf(morgan);
tv.setText(s);


try{

//InetAddress ipaddress = InetAddress.getByName("localhost");
InetAddress ipaddress = InetAddress.getByName("192.168.10.11");
int port = 6500;
//byte[] buffer = new byte[1024]; // empty byte array
String msg ="hello goooooooogle"; // send this message to the server
byte [] b_array = msg.getBytes();

//on SERVER side DatagramSocket able to receive packets on 8080 port
DatagramPacket packet = new DatagramPacket(b_array, b_array.length, ipaddress, port);// DatagramPacket(byte[], byte_length, InetAddress, port_number)
DatagramSocket socket = new DatagramSocket();
socket.send(packet);
socket.close();

}
catch(Exception e)
{
System.out.println(e);
}
}




});
}

public boolean isOnline() {

Runtime runtime = Runtime.getRuntime();
try {

Process ipProcess = runtime.exec("/system/bin/ping -c 1 192.168.10.11");
//Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
int exitValue = ipProcess.waitFor();
return (exitValue == 0);

}
catch (IOException e)
{ e.printStackTrace(); }
catch (InterruptedException e) { e.printStackTrace(); }

return false;
}

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings)
{
return true;
}
return super.onOptionsItemSelected(item);
}
}

服务器

public class server 
{
public static void main(String args[])
{

try{
System.out.println("aaa");
byte[] inbuf = new byte[1000]; // default size
DatagramPacket packet = new DatagramPacket(inbuf, inbuf.length);

DatagramSocket socket = new DatagramSocket(6500);
socket.receive(packet);

int numBytesReceived = packet.getLength();
System.out.println(numBytesReceived);
String s = new String(inbuf);
System.out.println(s);
//System.out.println(inbuf[2]);

socket.close();
}
catch(Exception e)
{
System.out.println(e);
}
}
}

最佳答案

在 Android 上处理网络操作时,建议使用单独的线程来执行此类操作。因此,请尝试将 onClick() 方法中的代码隔离到 AsyncTask 中以在后台运行它。

private class SendMessageTask extends AsyncTask<String, Void, Void> {
protected Void doInBackground(String... ip) {
// run network socket code here
return null;
}
}

然后 onClick() 将包含如下内容:

new SendMessageTask().execute("IP_HERE");

显然,您可以修改它以满足您的需要。但是,如果您需要在应用程序的生命周期内发送更多数据,您可能需要使用自己的后台线程。这里有一个更详细的解释为什么网络操作不能/不应该在 UI 线程中完成 - http://www.androiddesignpatterns.com/2012/06/app-force-close-honeycomb-ics.html

关于java - 将 udp 消息从 android 手机发送到 PC(windows)不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30162899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com