![](/img/trans.png)
[英]Android connects to java server socket, but server socket is not receiving data
[英]Server socket in Java (Android)
您好,我正在Android应用程序中编写服务器套接字。 它应该只允许一个客户端。 有趣的是,我希望服务器在可用时将消息(字符串)发送给客户端。 我有一个字符串队列,我希望服务器从该队列中尝试一个字符串并发送到客户端,如果队列为空,则不发送,只要将某些字符串推入队列即可发送。 这是我的方法:
public class Resource { public static Queue<String> q = new LinkedList<String>(); public static synchronized void addString(String commands) {//for reader semaphore.add(commands); } public synchronized String getString() { if (!semaphore.isEmpty()) { return semaphore.remove(); } else return "0"; } }
为此,我有一个字符串队列q,可以在其中添加另一个类的字符串。 这是我的服务器代码:
new Thread(new Runnable() { @Override public void run() { while (true) { try { // Listens for a connection to be made to this socket. Socket socket = my_serverSocket.accept(); //send message to client PrintWriter out = new PrintWriter(socket.getOutputStream(), true); out.println("1"); BufferedReader in = new BufferedReader(new InputStreamReader(socket .getInputStream())); String msg = in.readLine(); System.out.println("message is: " + msg); // tidy up //in.close(); //socket.close(); } catch (IOException ioe) { ioe.printStackTrace(); } catch (SecurityException se) { se.printStackTrace(); } } } }).start();
这是实现生产者-消费者模式的典型方法:生产者将把put()
字符串)放在队列中,服务器/消费者将从队列中take()
字符串take()
字符串。 如果队列为空,则服务器将阻塞并等待,并选择超时。
您可能不需要绑定队列,因此可以使用空的构造函数实例化LinkedBlockingQueue 。
BlockingQueue
所有实现都是线程安全的,因此您不需要对其基本操作进行额外的同步。 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.