当前位置: 首页 > 知识库问答 >
问题:

服务器未接收套接字客户端发送的消息

鲁丰
2023-03-14

我有套接字服务器(java桌面应用程序)正在等待从java webapp(套接字客户端)连接。通信看起来还可以,我在客户端看到来自服务器的消息,但是当我发送消息时,我在服务器端没有收到任何消息。会有什么问题呢?当我检查服务器与telnet,一切正常。下面是我的代码:

服务器:

public class ThumbnailGenerator {
    static Logger log = Logger.getLogger("ThumbnailGenerator");

    public static List<ThumbnailTask> taskqueue = new ArrayList<ThumbnailTask>();

    public static void main(String[] args) throws IOException {
        ThumbnailTask urlobject = new ThumbnailTask();
        urlobject.setUrl("http://www.google.com");
        urlobject.setOutputfile("newFile");
        urlobject.setStatus(0);
        taskqueue.add(urlobject);
        MyThread mt = new MyThread();
        mt.start();
        startServer();
    }

    public static void startServer() {
        final int portNumber = 2000;
        log.info("Creating server socket on port " + portNumber);

        ServerSocket serverSocket;

        try {
            serverSocket = new ServerSocket(portNumber);
            log.info("Server waiting for clients!");
            while (true) {
                Socket socket = serverSocket.accept();
                OutputStream os = socket.getOutputStream();
                PrintWriter pw = new PrintWriter(os, true);
                pw.println("Give URL address!");
                pw.flush();
                BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String str = br.readLine();

                log.info("Message received from client is " + str);

                String[] ar = str.split(",");
                ThumbnailTask urlobject = new ThumbnailTask();
                urlobject.setUrl(ar[0]);
                urlobject.setOutputfile(ar[1]);
                urlobject.setStatus(0);

                synchronized (taskqueue) {
                    taskqueue.add(urlobject);
                }

                pw.println("Starting making thumbnail of " + ar[0]);

                pw.close();
                socket.close();
                log.info("Thumbnail of: " + ar[0] + " will be created");
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    class MyThread extends Thread {
        static Logger log = Logger.getLogger("MyThread");
        boolean running = true;

        public void run() {
            log.debug("ENTRY THREAD");
            while (running) {
                if (!ThumbnailGenerator.taskqueue.isEmpty()) {
                    Iterator<ThumbnailTask> thumbnailiterator = ThumbnailGenerator.taskqueue.iterator();
                    int count = 0;
                    while (thumbnailiterator.hasNext()) {
                        ThumbnailTask task = thumbnailiterator.next();
                        boolean thumbnailresult = false;
                        if (task.getStatus() == 0) {
                            thumbnailresult = ThumbnailGenerator.makeThumbnail(task.getUrl(), task.getOutputfile());
                            if (thumbnailresult = true) {
                                task.setStatus(1);
                                //ThumbnailGenerator.taskqueue.set(count, task);
                                log.info("RESULT = true");
                            }
                        }
                        count++;
                    }
                } else {
                    running = false;
                }
                try {
                    MyThread.sleep(10000);
                } catch (InterruptedException e) {
                    running = false;
                    e.printStackTrace();
                }
            }
            log.debug("EXIT");
        }

客户:

public static void startSender(String url) {
    final String host = "localhost";
    final int portNumber = 2000;
    log.info("Creating socket to '" + host + "' on port " + portNumber);

    try {
        while (true) {
            Socket socket = new Socket(host, portNumber);
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

            log.info("Server says:" + br.readLine());

            OutputStream os = socket.getOutputStream();
            OutputStreamWriter osw = new OutputStreamWriter(os);
            BufferedWriter bw = new BufferedWriter(osw);


            String sendMessage = url;
            bw.write(sendMessage);
            bw.flush();
            log.info("Message sent to the server : " + sendMessage);

            log.info("Server says:" + br.readLine());

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

谢谢帮忙!

共有1个答案

王高超
2023-03-14

你在读台词,但不是在写台词。在消息中添加行终止符,或使用println()

 类似资料:
  • 我对Android系统是新手。我有一个客户端类,我的主要活动引用。client类将客户端套接字连接到充当服务器的外部设备,但是它从不将我试图发送的消息发送到服务器。我知道这不是连接,因为在创建套接字时,我将setKeepAlive()设置为true,当我试图发送消息时不会引发异常,socket.isconnected()返回true,如果我试图在发送消息之前连接套接字,它会引发“已经连接”的异常。

  • 我正在使用网络库和浏览器上的WebSocket实现一个套接字节点服务器。我正在成功使用telnet,但浏览器工作不正常。浏览器成功连接到套接字服务器并发送消息。我的服务器实现了一个事件,并立即触发和事件<代码>关闭,事件在断开连接时执行删除客户端(关闭浏览器,连接松动…)。 我不希望浏览器发送消息,然后断开连接。有人知道问题出在哪里吗? 套接字服务器 客户端(浏览器) 浏览器连接到服务器时的输出

  • 问题内容: 我正在尝试用两个客户端实现一个系统,其中一个客户端发送一条消息,而另一个客户端将接收该消息。下图将以更直观的方式对其进行解释: 因此,客户端1将消息发送到服务器(此工作正常),服务器接收到“推送”消息并发出应由客户端2接收的“弹出”消息。这里的问题是客户端2从未收到“流行”消息。:( 这是所有代码。 SERVER.JS 客户1(aka mobile.html) 客户2(aka web.

  • 我试图用java实现一个客户端服务器,在这里我读取客户端中的输入并在服务器中执行UperCase,然后返回客户端并打印UperCase。我使用ObjectOutputStream和ObjectInputStream进行读写,但是当我在客户机中键入一个msg时,程序会显示以下错误: Digite uma msg casa java.io.eofexception位于java.io.datainput

  • 问题内容: 我有一个C ++服务器和两个客户端(红宝石和Java)。一切都在64位linux机器(java 1.7.0_17)上运行。ruby客户端可以正常工作,但是java版本会出现问题。 在Java中,我尝试将字符串从客户端发送到服务器。实际上,服务器收到了整个字符串,但是服务器认为还有更多东西要接收。 红宝石客户端看起来像这样: 这里的一切工作正常。红宝石客户端发送一个字符串。服务器接收该字