首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网络通信无法正常工作

网络通信无法正常工作
EN

Stack Overflow用户
提问于 2015-11-29 00:14:36
回答 2查看 25关注 0票数 1

我做了个小游戏。现在我想从我的服务器上获得最高分。客户端的代码:

代码语言:javascript
复制
        private int getOnlineHighscore() {
    int highscore = 0;
    try {
        socket = new Socket("localhost", 444);
        input = socket.getInputStream();
        System.out.println(input);
        highscore = input.read();
        input.close();
        socket.close();
        input = null;
        socket = null;
    } catch (Exception e) {
        System.out.println("Verbindung fehlgeschlagen!");
    }
    System.out.println(highscore);
    return highscore;
}

在服务器上:

代码语言:javascript
复制
import java.io.*;
import java.net.*;

 public class ReadServer extends Thread {
 private Socket socket;

public ReadServer(Socket socket) {
    super();
    this.socket = socket;
}

public void run() {
    try {
        System.out.println(socket.getInetAddress());
        String result = "";
        try (BufferedReader br = new BufferedReader(
                new FileReader(System.getProperty("user.home") + "/AppData/Roaming/GameServer/.sg"))) {
            StringBuilder sb = new StringBuilder();
            String line = br.readLine();
            System.out.println("2");
            while (line != null) {
                sb.append(line);
                sb.append(System.lineSeparator());
                line = br.readLine();
            }
            System.out.println("3");
            result = sb.toString();
            System.out.println("3.5");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("4");
        socket.getOutputStream().write(Integer.parseInt(result));
        System.out.println(result);
    } catch (Exception e) {
    }

    try {
        socket.close();
    } catch (Exception e) {
    }
}

public static void main(String[] Args) {
    Socket socket = null;
    ServerSocket server = null;
    try {
        server = new ServerSocket(444);
        while (true) {
            socket = server.accept();
            new ReadServer(socket).start();
        }
    } catch (Exception e) {
    }

    try {
        server.close();
    } catch (Exception e) {
    }
}
}

如果我运行它,客户端函数返回:-1 \f25 server writes in the console-1(我认为不重要):-1\f25 /127.0.0.1 2 3 3.5 4

如何解决这个问题?我想将存储在我的服务器上的int发送给客户端。

-Jakob

EN

回答 2

Stack Overflow用户

发布于 2015-11-29 00:30:12

read()返回-1用于指定流的结束,请确保返回要读取的数据。

票数 1
EN

Stack Overflow用户

发布于 2015-11-29 00:30:34

文件中存储的最高分是多少?我相信文件是空的,它无法解析整数,但是因为catch块是空的,所以您看不到异常。放入printStacktrace或重新抛出。

另一个问题是OutputStream只发送字节,因此write方法只发送低8位。为了发送int,在客户端使用DataOutputStreamDataInputStream对流进行包装。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33973488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档