James Hancock
asked on
Java - quick review of RTS client TCP server setup code please
Hi
I've been asking a few Python RTS Q's, but I've decided to go back to java, based on recommendations in another question. - I'm thinking a lot clearer now, from all the mistakes  understood.
i'm going to start his time with a TCP connecting system for complete reliability, and then an in-game UDP cycle with TCP aid
First I'm doing the initial connection with TCP. Please check it out, the client socket is missing something initially, - Should not be difficult to fix, below server client
server needs server client stuct . . .
server client . .
client code . . . .
I've been asking a few Python RTS Q's, but I've decided to go back to java, based on recommendations in another question. - I'm thinking a lot clearer now, from all the mistakes  understood.
i'm going to start his time with a TCP connecting system for complete reliability, and then an in-game UDP cycle with TCP aid
First I'm doing the initial connection with TCP. Please check it out, the client socket is missing something initially, - Should not be difficult to fix, below server client
import java.io.*;
import java.net.*;
public class DRWserver extends Thread {
public int numClients, numClientsExpected;
serverClient[] serverClients;
public static int TCPport=1024;
ServerSocket serverSocket;
public DRWserver( int playerCount) {
numClientsExpected=playerCount;
serverClients = new serverClient[numClientsExpected];
numClients=0;
start();
}
public void run() {
DataOutputStream dos;
DataInputStream is;
try {
serverSocket = new ServerSocket(TCPport);
Thread.sleep(200);
System.out.println("Created TCP serverSocket on port "+serverSocket.getLocalPort());
boolean AcceptingClients=true;
while (AcceptingClients) {
System.out.println("\nClient TCP accept() : ");
Socket socket = serverSocket.accept();
System.out.println("Client joining"); // needs serverClients to be added to
System.exit(0);
}
} catch (Exception e) {
System.out.println("\nDRWserver run ex : "+e);
e.printStackTrace();
}
}
public static void main(String[] args) {
new DRWserver(3);
}
}
server needs server client stuct . . .
server client . .
import java.net.*;
public class serverClient {
int playerNumber;
Inet4Address address;
}
client code . . . .
import java.io.*;
import java.net.*;
public class DRWclient extends Thread{
InetAddress serverAddress;
int clientNumber;
Socket clientSocket;
public static byte MSG_JOIN=1;
public DRWclient(int cliNum, InetAddress serveraddress) {
clientNumber=cliNum;
serverAddress= serveraddress;
start();
}
public void run() {
try {
System.out.println("Client "+clientNumber+" run()");
clientSocket= new Socket();
while (!clientSocket.isConnected()) {
clientSocket= new Socket();
System.out.print("c");
}
System.out.println("Socket connected");
DataOutputStream os = new DataOutputStream(clientSocket.getOutputStream());
byte[] bytes = new byte[64];
bytes[0]=MSG_JOIN;
byte[] BAplayerNum = intToByteArray(clientNumber);
bytes[1]=BAplayerNum[0];
bytes[2]=BAplayerNum[1];
bytes[3]=BAplayerNum[2];
bytes[4]=BAplayerNum[3];
DatagramPacket packet = new DatagramPacket(bytes,64);
packet.setAddress(serverAddress);
os.write(bytes); // should be packet
} catch (Exception e) {
System.out.println("DRWclient run() ex : "+e);
e.printStackTrace();
}
}
public static void main(String[] args) {
InetAddress servAddress=null;
try {
servAddress = InetAddress.getByName("x.y.c.h server ip address");
} catch (Exception e) {
System.out.println("DRWclient main() ex : "+e);
e.printStackTrace();
}
DRWclient c0 = new DRWclient(0,servAddress);
}
public static int byteArrayToInt(byte[] b) {
return byteArrayToInt(b, 0);
}
public static int byteArrayToInt(byte[] b, int offset) {
int value = 0;
for (int i = 0; i < 4; i++) {
int shift = (4 - 1 - i) * 8;
value += (b[i + offset] & 0x000000FF) << shift;
}
return value;
}
public static byte[] intToByteArray(int value) {
byte[] b = new byte[4];
for (int i = 0; i < 4; i++) {
int offset = (b.length - 1 - i) * 8;
b[i] = (byte) ((value >>> offset) & 0xFF);
}
return b;
}
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
?
ASKER
Thanks. - if I have a pool of threads handling activity messages from each client, where should I house the game state best, and the clock? Must the clock wait for an activity message from each client before incrementing? - like a game of monopoly needs a move from everyone?
Sorry - i'm get confused. You asked for a review of your code, which i gave you and you ignored - now you're asking another question after closing it ..??
ASKER
CEHJ, I apologize for not giving you credit for your excellent answer. I am asking moderators to let me re-assign credit. I just quickly pressed accept answer on the answer with the socket code I was hoping for. - and not multiple solutions.
mods, can you re-open the closing for me?
mods, can you re-open the closing for me?
Oh OK. You need to click on this to get attention
Having said that, you still need to open a new question
Having said that, you still need to open a new question
I just quickly pressed accept answer on the answer with the socket code I was hoping for. - and not multiple solutionsAnd now you have gone and still not selected multiple solutions? And my answer which was directly addressing your initial question goes unrewarded?
:)
Oh dear! Didn't notice there was a problem still ...
Open in new window