Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java套接字连接->;写入服务器时发生奇怪的崩溃_Java_Sockets_Networking_Server - Fatal编程技术网

Java套接字连接->;写入服务器时发生奇怪的崩溃

Java套接字连接->;写入服务器时发生奇怪的崩溃,java,sockets,networking,server,Java,Sockets,Networking,Server,我最近制作了一个2D平台,并尝试实现一些在线2播放器功能。有一个服务器程序,当然还有客户端。它的工作原理是这样的:您的客户机可以在ID 1和ID 2之间进行选择,并且ID直接发送到服务器,因此服务器可以决定接收哪些数据以及将哪些数据发送回您(客户机1需要客户机2的坐标,例如) 现在的问题是,发送的数据以某种方式被操纵,并且存在错误的值。此外,如果我发送了一个真正的布尔值,我的客户机将在我发送布尔值的行中停止,并且不会继续运行代码 我在一个新的客户端程序中重新构建了“连接”方法,与gameclie

我最近制作了一个2D平台,并尝试实现一些在线2播放器功能。有一个服务器程序,当然还有客户端。它的工作原理是这样的:您的客户机可以在ID 1和ID 2之间进行选择,并且ID直接发送到服务器,因此服务器可以决定接收哪些数据以及将哪些数据发送回您(客户机1需要客户机2的坐标,例如)

现在的问题是,发送的数据以某种方式被操纵,并且存在错误的值。此外,如果我发送了一个真正的布尔值,我的客户机将在我发送布尔值的行中停止,并且不会继续运行代码

我在一个新的客户端程序中重新构建了“连接”方法,与gameclient的问题完全相同

谢谢你的建议!经过长时间的谷歌搜索,似乎没有人遇到同样的问题:-(

来自(重建的)客户端的代码:

所以你可以看到收到的每个值都是错误的,除了布尔值。现在,如果我进入我的客户机代码,将“攻击”布尔值设置为true,输出结果如下:

Connecting...
X: 5 / Y: 10 / Attacked: true / 
因此,我假设代码只是停止了,而没有继续执行代码(这发生在我的客户身上,当时甚至停止了滴答声)


很抱歉发了这么长的帖子,我希望我的代码足以让你们检查一下!非常感谢!

您忘记了在您的客户机
案例
和服务器中的
案例3
案例4
中的
中断h处理布尔值的
案例4
。 这可能不是奇怪数值的来源,但我很确定这是布尔错误的原因。


尝试添加所有的
break
语句,这样它就不会在执行时执行一些意外的疯狂字节操作。

首先:谢谢你的建议!现在甚至没有奇怪的值,服务器总是得到正确的值、坐标和布尔值!但是现在客户端不知怎么地不会收到数据!我猜是这样的t break;语句也会中断for循环,因此客户端不会读取所有数据。这里没有“崩溃”的证据。
package me.server.lel;

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import java.net.SocketException;

import javax.swing.JFrame;

public class ServerThread extends Canvas implements Runnable {

    Socket incoming; //the client socket so to say

    public int id;
    public  int x1 = 0,y1 = 0,x2 = 0,y2 = 0;
    public  boolean attacked1 = false, attacked2 = false;

    public ServerThread(Socket incoming, int id) {
        this.incoming = incoming;
        this.id = id;
    }

    @Override
    public void run() {

        try {
            //Reading the input and saving it in global variables
            DataInputStream in  = new DataInputStream(incoming.getInputStream());

            byte index;
            int byteAmount = 4;

            for(int i = 0; i < byteAmount; i++ ){
                index = in.readByte();
                switch(index) {
                    case 1:
                        id = in.readInt();
                        break;
                    case 2:
                        if(id == 1) {
                        x1 = in.readInt(); 
                        } else if(id == 2) {
                            x2 = in.readInt(); ;
                        }
                        break;
                    case 3:
                        if(id == 1) {
                            y1 = in.readInt(); 
                        } else if(id == 2) {
                            y2 = in.readInt(); 
                        }
                    case 4:
                        if(id == 1) {
                            attacked1 = in.readBoolean();
                        } else if(id == 2) {
                            attacked2 = in.readBoolean();
                        }
                    default:
                }
            }

            //Writing back the values of the opposite player
            DataOutputStream out = new DataOutputStream(incoming.getOutputStream());

            if(id == 1) {
                out.writeByte(1);
                out.writeInt(x2);
                out.flush();

                out.writeByte(2);
                out.writeInt(y2);
                out.flush();

                out.writeByte(3);
                out.writeBoolean(attacked2);
                out.flush();

            } else if(id == 2) {
                out.writeByte(1);
                out.writeInt(x1);
                out.flush();

                out.writeByte(2);
                out.writeInt(y1);
                out.flush();

                out.writeByte(3);
                out.writeBoolean(attacked1);
                out.flush();
            }
        } catch(SocketException e) {
            System.out.println("User Disconnected: " + incoming.getLocalAddress());
            e.printStackTrace();
        } catch(Exception e) {
            e.printStackTrace();
        }   
    }
}
Connecting...
X: 5 / Y: 10 / Attacked: false / 
RECEIVED:x: 0 / Y: 33554432 / rAttacked: false / 
rAttacked: false / 
Connecting...
X: 5 / Y: 10 / Attacked: true /