【发布时间】:2021-02-24 00:21:29
【问题描述】:
我不是网络专家。但是,我用Java开始了一个大项目,我已经制作了SQL数据库和大部分服务器,我目前只使用TCP,并且我使用Strings作为服务器端的操作标识符,我不知道是否这是正确的,但正在工作。问题是有一些操作需要我在客户端连接时一直发送数据(比如我在最后一个“if”句子中尝试实现的聊天),我不知道如何在客户端实现它而不捕获来自其他操作的错误信息,例如投注结果或其他事情。我应该只使用不同的端口吗?
public static class Users extends Thread{
private final Socket socket;
private final Connection connection;
private final DataInputStream dataInputStream;
private final DataOutputStream dataOutputStream;
public Users(Socket socket, Connection connection) throws IOException {
this.socket=socket;
this.connection=connection;
this.dataInputStream=new DataInputStream(socket.getInputStream());
this.dataOutputStream=new DataOutputStream(socket.getOutputStream());
}
@Override
public void run(){
while (true){
try {
String operation= dataInputStream.readUTF();
if(operation.equals("Login")){
//censored//
}
if(operation.equals("Register")){
//censored//
}
if(operation.equals("GetClientData")){
//censored//
}
if(operation.equals("Deposit")){
//censored//
}
if(operation.equals("Withdraw")){
//censored//
}
if(operation.equals("PlaceBetOnRoulette")){
//censored//
}
if(operation.equals("PlaceBetOnCrash")){
//censored//
}
if(operation.equals("PlaceBetOnCoinFlip")){
//censored//
}
if(operation.equals("PlaceBetOnSlot")){
//censored//
}
if (operation.equals("SendMessage")){
String message= new String();
message= dataInputStream.readUTF();
if (!message.equals("") && !message.isEmpty()){
for (int i=0;i<arrayList.size();i++){
Socket chatVolatileSocket = (Socket) arrayList.get(i);
DataOutputStream volatileMessageSender= new DataOutputStream(chatVolatileSocket.getOutputStream());
volatileMessageSender.writeUTF(message);
}
}
};
}
catch (IOException e) {
e.printStackTrace();
break;
}
}
try {
arrayList.remove(socket);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
【问题讨论】:
-
您似乎已经有了用于发送不同类型消息的通信协议。你的问题到底出在哪里?
-
@ControlAltDel 我的问题是所有其他操作都是线性的,所以我知道我发送和接收的所有内容的顺序,但是如果我在客户端发送带有消息的字符串等待带有投注结果的字符串或类似的东西我会选择错误的字符串。因为我不知道什么时候有人会给我一个 writeUTF
标签: java sockets tcp udp client