Multithreading 需要帮助让我的基本套接字服务器工作吗

Multithreading 需要帮助让我的基本套接字服务器工作吗,multithreading,networking,utf,Multithreading,Networking,Utf,所以,我设法让一个基本的单连接服务器运行,现在我正试图将它转换为一个多线程服务器,用于一个我想做的小型多层项目,我是完全自学的,我确实在一些事情上遇到了困难,而网络是我很长一段时间以来一直试图理解的主要问题,也许你们可以帮我 问题:当我只有一个线程可以writeUTF和readUTF时,它工作得很好,发送了UTF并关闭了连接,尽管现在我已经将其移动到多线程,我甚至不确定是客户端没有发送UTF,服务器没有接收到UTF,还是服务器没有重新发送UTF,也许你们可以让我知道,这是密码 服务器端代码 Se

所以,我设法让一个基本的单连接服务器运行,现在我正试图将它转换为一个多线程服务器,用于一个我想做的小型多层项目,我是完全自学的,我确实在一些事情上遇到了困难,而网络是我很长一段时间以来一直试图理解的主要问题,也许你们可以帮我

问题:当我只有一个线程可以
writeUTF
readUTF
时,它工作得很好,发送了UTF并关闭了连接,尽管现在我已经将其移动到多线程,我甚至不确定是客户端没有发送UTF,服务器没有接收到UTF,还是服务器没有重新发送UTF,也许你们可以让我知道,这是密码

服务器端代码

Server.java

Input.java


您在服务器中创建并启动了一个
线程
对象,但未能将
播放器
runnable传递给它

package TestServer.net;
/**
 * This is the server class, the server is the main class
 * for instantiating anything related to server-side functionality,
 * the server listens for incoming connections aswell as handles
 * the data transmitted between the two.
 * 
 * 
 * @author Christian
 */
import java.io.*;
import java.net.*;
import java.sql.*;

import TestServer.net.players.Player;


public class Server {
    Player[] player = new Player[Config.MAX_CONNECTIONS];
    ServerSocket serverSocket;
    Socket socket;
    DataOutputStream out;
    DataInputStream in;

public Server() throws IOException {
    // Open the server on the following port
    System.out.println("Attempting to setup server...");
    serverSocket = new ServerSocket(43594);
    System.out.println("Server officially setup on port: 43594");
    // Tell the server to accept connections
    while (true) {
        socket = serverSocket.accept();
        for(int i = 0; i < Config.MAX_CONNECTIONS; i++) {
            System.out.println("Server is waiting for connections...");
            System.out.println("Connection from: " +socket.getInetAddress());
            // Setup the server to send out data.
            out = new DataOutputStream(socket.getOutputStream());
            in = new DataInputStream(socket.getInputStream());
            if(player[i] == null) {
                player[i] = new Player(out, in, player);
                Thread thread = new Thread();
                thread.start();
                break; // End the loop to start listening for more connections
            }
        }
    }
}

public static void main(String args[]) throws IOException {
    new Server();
}
}
package TestServer.net.players;

import TestServer.net.*;
import java.io.*;

public class Player implements Runnable {
Player[] player = new Player[Config.MAX_CONNECTIONS];
DataOutputStream out;
DataInputStream in;


public Player(DataOutputStream out, DataInputStream in, Player[] player) {
    this.in = in;
    this.out = out;
    this.player = player;
}

public void run() {
    while(true) {
        try {
            String message = in.readUTF();
            for(int i = 0; i < Config.MAX_CONNECTIONS; i++) {
                if(player[i] != null) {
                    player[i].out.writeUTF(message);
                }
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}
}
package TestClient.net;
import java.net.*;
import java.util.Scanner;
import java.io.*;

import TestClient.net.util.Input;

public class Client {

Socket socket;
DataInputStream in;
DataOutputStream out;

public Client() throws UnknownHostException, IOException {
    // Set the client to connect to (IP, Port);
    System.out.println("Attempting to connect to server on port: 43594");
    socket = new Socket("localhost", 43594);
    System.out.println("Successfully connected to server...");
    in = new DataInputStream(socket.getInputStream());
    out = new DataOutputStream(socket.getOutputStream());
    Input input = new Input(in);
    Thread thread = new Thread(input);
    thread.start();
    Scanner scanner = new Scanner(System.in);
    while(true)  {
        String sendMessage = scanner.nextLine();
        out.writeUTF(sendMessage);

    }
}

public static void main(String args[]) throws UnknownHostException, IOException {
    new Client();
}
}
    package TestClient.net.util;


import java.io.DataInputStream;
import java.io.IOException;

public class Input implements Runnable {

    DataInputStream in;

    public Input(DataInputStream in) {
        this.in = in;
    }

    public void run() {
        while (true) {
            String message;
            try {
                message = in.readUTF();
                System.out.println(message);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }
}