Java套接字未收到来自Print Writer的响应

rourke750

服务器从这里开始:

public static void main(String[] args){
    System.out.println("Server has started");
    try {
        ServerSocket socket = new ServerSocket(17000);
        while(true){
        ThreadedClass w;
        w = new ThreadedClass(socket.accept());
        Thread t = new Thread(w);
        t.start();
        }
    } catch (IOException e) {
        System.out.print("Failed");
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

然后这个课:

package com.sandislandsrv.rourke750;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class ThreadedClass implements Runnable{

private Socket socket;

public ThreadedClass(Socket socket){
    this.socket = socket;
}

@Override
public void run() {
    MysqlDataClass db = Start.getData();
    try {
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter out = new PrintWriter(socket.getOutputStream());
        String cred = in.readLine();
        String[] creds = cred.split(" ");
        System.out.print(creds[0] + creds[1]);
        boolean authenticate = db.getUsernamePassValid(creds[0], creds[1]);
        if (!authenticate){
            System.out.println("Failed to log in, bad password");
            out.println("BAD");
            out.close();
            return;
        }
        out.println("GOOD");
        String line;
        while ((line = in.readLine()) != null){
            if (line.equals("END")){
                out.close();
                return;
            }
            if (line.equals("GET")){
                out.println(db.getMessages(creds[0]));
            }
            if (line.equals("IN")) break;
            if (line.equals("REMOVE")){
                line = in.readLine();
                db.removeMessage(creds[0], line);
            }
            }
        line = in.readLine();
        String[] format = line.split("Theamjgfdngkngfd8998906504906595665");
        String[] timeformat = format[1].split(":");
        long time = System.currentTimeMillis()/1000;
        if (Long.parseLong(timeformat[0]) != 0)
            time += 3600 * Long.parseLong(timeformat[0]);
        if (Long.parseLong(timeformat[1]) != 0)
            time += 60 * Long.parseLong(timeformat[1]);
        if (Long.parseLong(timeformat[2]) != 0)
            time += Long.parseLong(timeformat[2]);
        db.addMessage(creds[0], format[0], time);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

public void remove(){

}

}

然后稍后我调用此方法

public String[] getNames(){
    StringBuilder builder = new StringBuilder();
    try {
        Socket socket = new Socket("share.betterassociations.com", 17000);
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        out.println(username.getText().toString() + " " + password.getText().toString());
        System.out.print("test");
        String passed = input.readLine();
        System.out.print("test2");
        if (passed.equals("BAD")) {
            System.out.print("fail");
            loginerror.setVisible(true);
            socket.close();
            return null;
        }
        System.out.print("test2");
        out.println("GET");
        String line;
        while ((line = input.readLine()) != null){
            if (line.equals("END")) break;
            builder.append(line);
        }
        out.close();
        socket.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return builder.toString().split(" ");
}

由于某种原因,它似乎在发布的最后一个方法中被冻结,该方法使用传递的String = input.readLine();。

我不明白为什么会这样,因为我正在从服务器向客户端发送一个字符串,但是客户端没有收到它。

马克·W

在为服务器和客户端的outputStream写入out.flush()之后添加一个调用,如下所示

....
out.println("GOOD");
out.flush();
....

或者,通过在此处更改服务器(已启用客户端)来启用自动刷新:

....
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
....

但是根据文档:如果启用了自动刷新,则仅当调用println,printf或format方法之一时才执行此操作,而不是每当碰巧输出换行符时才执行。

所以别被搞糊涂了

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java代理-无法收到来自主机/套接字问题的响应

来自分类Dev

原始套接字未收到icmp响应

来自分类Dev

NodeJS + Cpanel错误:未收到来自应用程序的响应(Node js,Express,Mongoose)

来自分类Dev

Java套接字将发送但未接收到响应

来自分类Dev

没有收到来自服务器的响应:Java.net.SocketException:recvfrom失败:ECONNRESET

来自分类Dev

如何知道何时收到来自服务器的响应?

来自分类Dev

无法收到来自远程服务器的响应

来自分类Dev

无法收到来自Linkedin API公司搜索的响应

来自分类Dev

设备未收到来自GCM的消息

来自分类Dev

收到来自Web Service的响应后,Http请求和响应丢失了吗?

来自分类Dev

PostAsync后未收到响应

来自分类Dev

AJAX 未收到 PHP 响应

来自分类Dev

为什么会收到“错误套接字挂断”响应?

来自分类Dev

收到握手响应之前,套接字连接已关闭

来自分类Dev

Java服务器套接字响应

来自分类Dev

在node.js中,如果没有收到来自HTTP请求的响应,您怎么知道?

来自分类Dev

在node.js中,如果没有收到来自HTTP请求的响应,您怎么知道?

来自分类Dev

没有收到来自virtualhosts apache2 ubuntu14的响应

来自分类Dev

scrapyrt没有收到来自scrapy搜寻器的响应

来自分类Dev

AWS lambda 函数-“发生错误:收到来自 Lambda 的错误响应:已处理”

来自分类Dev

AWS Lex 收到来自 lambda 函数的无效响应 - 无法构建 IntentResponse 的实例

来自分类Dev

TCP 服务器未收到来自 TCP 客户端的消息 (Java)

来自分类Dev

套接字服务器同时响应来自客户端套接字的多个请求

来自分类Dev

来自angular的$ http.post到达php,但是在angularjs中未收到响应

来自分类Dev

套接字未收到完整的流

来自分类Dev

套接字未收到完整的流

来自分类Dev

活动未收到来自服务的本地广播

来自分类Dev

iOS:未收到来自Facebook App请求的通知

来自分类Dev

iOS:未收到来自Facebook App请求的通知

Related 相关文章

  1. 1

    Java代理-无法收到来自主机/套接字问题的响应

  2. 2

    原始套接字未收到icmp响应

  3. 3

    NodeJS + Cpanel错误:未收到来自应用程序的响应(Node js,Express,Mongoose)

  4. 4

    Java套接字将发送但未接收到响应

  5. 5

    没有收到来自服务器的响应:Java.net.SocketException:recvfrom失败:ECONNRESET

  6. 6

    如何知道何时收到来自服务器的响应?

  7. 7

    无法收到来自远程服务器的响应

  8. 8

    无法收到来自Linkedin API公司搜索的响应

  9. 9

    设备未收到来自GCM的消息

  10. 10

    收到来自Web Service的响应后,Http请求和响应丢失了吗?

  11. 11

    PostAsync后未收到响应

  12. 12

    AJAX 未收到 PHP 响应

  13. 13

    为什么会收到“错误套接字挂断”响应?

  14. 14

    收到握手响应之前,套接字连接已关闭

  15. 15

    Java服务器套接字响应

  16. 16

    在node.js中,如果没有收到来自HTTP请求的响应,您怎么知道?

  17. 17

    在node.js中,如果没有收到来自HTTP请求的响应,您怎么知道?

  18. 18

    没有收到来自virtualhosts apache2 ubuntu14的响应

  19. 19

    scrapyrt没有收到来自scrapy搜寻器的响应

  20. 20

    AWS lambda 函数-“发生错误:收到来自 Lambda 的错误响应:已处理”

  21. 21

    AWS Lex 收到来自 lambda 函数的无效响应 - 无法构建 IntentResponse 的实例

  22. 22

    TCP 服务器未收到来自 TCP 客户端的消息 (Java)

  23. 23

    套接字服务器同时响应来自客户端套接字的多个请求

  24. 24

    来自angular的$ http.post到达php,但是在angularjs中未收到响应

  25. 25

    套接字未收到完整的流

  26. 26

    套接字未收到完整的流

  27. 27

    活动未收到来自服务的本地广播

  28. 28

    iOS:未收到来自Facebook App请求的通知

  29. 29

    iOS:未收到来自Facebook App请求的通知

热门标签

归档