I am writing a simple method for udp server:
private void runUdpServer() { String message; byte[] lmessage = new byte[MAX_UDP_DATAGRAM_LEN]; DatagramPacket packet = new DatagramPacket(lmessage, lmessage.length); DatagramSocket socket = null; try { socket = new DatagramSocket(UDP_SERVER_PORT); socket.receive(packet); message = new String(lmessage, 0, packet.getLength()); textMessage.setText(message); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (socket != null) { socket.close(); } } }
How can I start this server and listen to messages. I use this method in onCreate, but when I send a message from the client, I saw this message, but when I send the second message, I do not see this second. Only this is the first message. How can I do to receive new messages?
Edit: This is my code now:
@SuppressLint("NewApi") public class Server extends Activity { private static final int UDP_SERVER_PORT = 2004; private static final int MAX_UDP_DATAGRAM_LEN = 1500; private TextView textMessage; private RunServerInThread runServer = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_server); if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } textMessage = (TextView) findViewById(R.id.messageText); runServer = new RunServerInThread(); runServer.start(); } private Runnable updateTextMessage = new Runnable() { public void run() { if (runServer == null) return; textMessage.setText(runServer.getLastMessage()); } }; @Override public boolean onCreateOptionsMenu(Menu menu) {
and I get an error:
05-30 12:18:48.562: E/AndroidRuntime(17987): FATAL EXCEPTION: Thread-1233 05-30 12:18:48.562: E/AndroidRuntime(17987): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 05-30 12:18:48.562: E/AndroidRuntime(17987): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4746) 05-30 12:18:48.562: E/AndroidRuntime(17987): at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:823) 05-30 12:18:48.562: E/AndroidRuntime(17987): at android.view.View.requestLayout(View.java:15469) 05-30 12:18:48.562: E/AndroidRuntime(17987): at android.view.View.requestLayout(View.java:15469) 05-30 12:18:48.562: E/AndroidRuntime(17987): at android.view.View.requestLayout(View.java:15469) 05-30 12:18:48.562: E/AndroidRuntime(17987): at android.view.View.requestLayout(View.java:15469) 05-30 12:18:48.562: E/AndroidRuntime(17987): at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:318) 05-30 12:18:48.562: E/AndroidRuntime(17987): at android.view.View.requestLayout(View.java:15469) 05-30 12:18:48.562: E/AndroidRuntime(17987): at android.widget.TextView.checkForRelayout(TextView.java:6368) 05-30 12:18:48.562: E/AndroidRuntime(17987): at android.widget.TextView.setText(TextView.java:3622) 05-30 12:18:48.562: E/AndroidRuntime(17987): at android.widget.TextView.setText(TextView.java:3480) 05-30 12:18:48.562: E/AndroidRuntime(17987): at android.widget.TextView.setText(TextView.java:3455) 05-30 12:18:48.562: E/AndroidRuntime(17987): at pl.udpconnection.server.Server$RunServerInThread.run(Server.java:89)
How can I solve this problem?
source share