嗨,我得到一个
Android应用程序,但是当我启动它,我的控制台中出现错误.我正在使用Datagram套接字创建一个连接,而我正在使用2类:MainActivity(它是应用程序的主要活动)和UdpClientServer来创建连接.
这里代码MainActivity:
public class MainActivity extends Activity { private UdpClientServer cu; private EditText textIpScheda; private EditText textUdpPort; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textIpScheda = (EditText) findViewById(R.id.textIpScheda); textUdpPort = (EditText) findViewById(R.id.textUdpPort); try { cu = new UdpClientServer(this); } catch (IOException e) { e.printStackTrace(); } } public EditText getTextIpScheda(){ return textIpScheda; } public void setTextIpScheda(EditText textIpScheda){ this.textIpScheda = textIpScheda; } public EditText getTextUdpPort() { return textUdpPort; } public void setTextUdpPort(EditText textUdpPort) { this.textUdpPort = textUdpPort; }
这里代码UdpClientServer:
public class UdpClientServer { public static String sReceive; private static DatagramSocket dSocket; int receiveBufferSize = 1024; int portUdp = 0; final String PINGACMD = "AT*PINGA001"; InetAddress ipScheda; byte[] receiveData = new byte[receiveBufferSize]; private MainActivity gui = null; public UdpClientServer(MainActivity gui) throws SocketException,IOException { this.gui = gui; portUdp = Integer.parseInt(String.valueOf(gui.getTextUdpPort().getText())); dSocket = new DatagramSocket(portUdp); } public void run(){ while (true) { // svuotamento buffer Arrays.fill(receiveData,(byte) 0); DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length); try { dSocket.receive(receivePacket); } catch (IOException e) { e.printStackTrace(); } ipScheda = receivePacket.getAddress(); int port = receivePacket.getPort(); gui.getTextUdpPort().setText("" + port); gui.getTextIpScheda().setText(ipScheda.getHostAddress()); sReceive = new String(receivePacket.getData()); this.sendCommand(PINGACMD); } } public void sendCommand(String outSentence){ byte[] sendData = outSentence.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData,sendData.length,ipScheda,portUdp); try { dSocket.send(sendPacket); Thread.sleep(100); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } finally { } }
}
这里的logcat:
12-29 11:43:22.291 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ java.net.SocketException: socket Failed: EACCES (Permission denied) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at libcore.io.IoBridge.socket(IoBridge.java:623) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at java.net.PlainDatagramSocketImpl.create(PlainDatagramSocketImpl.java:93) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at java.net.DatagramSocket.createSocket(DatagramSocket.java:157) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at java.net.DatagramSocket.<init>(DatagramSocket.java:80) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at com.example.matteo.myfirstapp.UdpClientServer.<init>(UdpClientServer.java:32) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at com.example.matteo.myfirstapp.MainActivity.onCreate(MainActivity.java:24) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at android.app.Activity.performCreate(Activity.java:5933) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at android.app.ActivityThread.access$800(ActivityThread.java:144) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at android.os.Looper.loop(Looper.java:135) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5221) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ Caused by: android.system.ErrnoException: socket Failed: EACCES (Permission denied) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at libcore.io.Posix.socket(Native Method) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:282) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ at libcore.io.IoBridge.socket(IoBridge.java:608) 12-29 11:43:22.294 28914-28914/com.example.matteo.myfirstapp W/System.err﹕ ... 18 more
在我的AndroidManifest.xml中刚刚添加了字符串
<uses-permission android:name="android.permission.INTERNET"/>
但它不行
你可以帮我吗?
谢谢