Java插座服务器可以从C#客户端接收消息

发布于 2025-02-08 18:11:17 字数 4844 浏览 2 评论 0原文

我正在使用C#创建应与Java套接字服务器连接的客户端套接字。但是,无论我尝试什么代码总是设法发送某种消息,但是对于Java服务器来说,它是完全空的。

这是C#客户端代码:

using Godot;
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

public class Scanning: Control
{
    // Called when the node enters the scene tree for the first time.
    public override void _Ready()
    {
        string toSend = "Handshake:Interface";

        IPEndPoint serverAddress = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 429);

        Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        clientSocket.Connect(serverAddress);

        // Sending
        int toSendLen = System.Text.Encoding.ASCII.GetByteCount(toSend);
        byte[] toSendBytes = System.Text.Encoding.ASCII.GetBytes(toSend);
        byte[] toSendLenBytes = System.BitConverter.GetBytes(toSendLen);
        clientSocket.Send(toSendLenBytes);
        clientSocket.Send(toSendBytes);

        Console.WriteLine("Client received: " + rcv);*/

        clientSocket.Close();
    }
}

负责与客户端合作的Java代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;


public class ClientHandler {
    
    public PrintWriter out;
    public BufferedReader in;

    public Socket clientSocket;
    
    public Thread thread;
    
    public ClientHandler(Socket client) {
        clientSocket = client;
        System.out.println("Processing connection from " + clientSocket.getInetAddress());
        thread = new Thread(new Runnable() {
            
            @Override
            public void run() {
                try {
                    out = new PrintWriter(clientSocket.getOutputStream(), true);
                    in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream(), "UTF-8"));
                    ArrayList<String> cmdBuffer = new ArrayList<String>();
                    while (!Main.test.get()) {
                        String msg = in.readLine();

                        if(msg.startsWith("Handshake")) {
                            System.out.println("LOG: " + msg);
                            String[] work = msg.split(":");
                            if (!MessageChannel.clients.contains(work[1])) {
                                respond("1/I/Handshake successful for/" + work[1]);
                                respond("Connected: " + MessageChannel.clients);
                                MessageChannel.buffer.put(work[1], cmdBuffer);
                                MessageChannel.clients.add(work[1]);
                            }
                        } else if (msg.startsWith("Disconnect")) {
                            System.out.println("LOG: " + msg);
                            String[] work = msg.split(":");
                            MessageChannel.clients.remove(work[1]);
                            MessageChannel.buffer.remove(work[1]);
                            out.println("I/Disconnected/" + work[1]);
                            
                        } else if(msg.startsWith("List")) {
                            System.out.println("LOG: " + msg);
                            respond("0/Connected: " + MessageChannel.clients);
                            
                        } else {
                            String[] work = msg.split(":");
                            if (MessageChannel.clients.contains(work[0])){
                                if (work[1].equals("Lookup")) {
                                    out.println(MessageChannel.buffer.get(work[0]).size() +"/Lookup:");
                                    for (String e : MessageChannel.buffer.get(work[0])) {
                                        out.println(e);
                                    }
                                    MessageChannel.buffer.replace(work[0], new ArrayList<String>());
                                } else {
                                    System.out.println("LOG: " + msg);
                                    MessageChannel.buffer.get(work[1]).add(work[2]);
                                    respond("0/I/Success");
                                }
                            }
                            
                        }
                        
                        
                    }
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
                
            }
        });
        thread.start();
        
        
        
    }
    

    
    
    public void respond(String msg) {
        out.println(msg);
        System.out.println("LOGR: " + msg);
    }
    

}

我该如何解决?提前致谢!

I am using C# to create a client socket that should connect with a Java socket server. But no matter what I try the code always manages to send some sort of message, but for the Java server it's completely empty.

This is the C# client code:

using Godot;
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

public class Scanning: Control
{
    // Called when the node enters the scene tree for the first time.
    public override void _Ready()
    {
        string toSend = "Handshake:Interface";

        IPEndPoint serverAddress = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 429);

        Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        clientSocket.Connect(serverAddress);

        // Sending
        int toSendLen = System.Text.Encoding.ASCII.GetByteCount(toSend);
        byte[] toSendBytes = System.Text.Encoding.ASCII.GetBytes(toSend);
        byte[] toSendLenBytes = System.BitConverter.GetBytes(toSendLen);
        clientSocket.Send(toSendLenBytes);
        clientSocket.Send(toSendBytes);

        Console.WriteLine("Client received: " + rcv);*/

        clientSocket.Close();
    }
}

Java code that is responsible for working with the client:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;


public class ClientHandler {
    
    public PrintWriter out;
    public BufferedReader in;

    public Socket clientSocket;
    
    public Thread thread;
    
    public ClientHandler(Socket client) {
        clientSocket = client;
        System.out.println("Processing connection from " + clientSocket.getInetAddress());
        thread = new Thread(new Runnable() {
            
            @Override
            public void run() {
                try {
                    out = new PrintWriter(clientSocket.getOutputStream(), true);
                    in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream(), "UTF-8"));
                    ArrayList<String> cmdBuffer = new ArrayList<String>();
                    while (!Main.test.get()) {
                        String msg = in.readLine();

                        if(msg.startsWith("Handshake")) {
                            System.out.println("LOG: " + msg);
                            String[] work = msg.split(":");
                            if (!MessageChannel.clients.contains(work[1])) {
                                respond("1/I/Handshake successful for/" + work[1]);
                                respond("Connected: " + MessageChannel.clients);
                                MessageChannel.buffer.put(work[1], cmdBuffer);
                                MessageChannel.clients.add(work[1]);
                            }
                        } else if (msg.startsWith("Disconnect")) {
                            System.out.println("LOG: " + msg);
                            String[] work = msg.split(":");
                            MessageChannel.clients.remove(work[1]);
                            MessageChannel.buffer.remove(work[1]);
                            out.println("I/Disconnected/" + work[1]);
                            
                        } else if(msg.startsWith("List")) {
                            System.out.println("LOG: " + msg);
                            respond("0/Connected: " + MessageChannel.clients);
                            
                        } else {
                            String[] work = msg.split(":");
                            if (MessageChannel.clients.contains(work[0])){
                                if (work[1].equals("Lookup")) {
                                    out.println(MessageChannel.buffer.get(work[0]).size() +"/Lookup:");
                                    for (String e : MessageChannel.buffer.get(work[0])) {
                                        out.println(e);
                                    }
                                    MessageChannel.buffer.replace(work[0], new ArrayList<String>());
                                } else {
                                    System.out.println("LOG: " + msg);
                                    MessageChannel.buffer.get(work[1]).add(work[2]);
                                    respond("0/I/Success");
                                }
                            }
                            
                        }
                        
                        
                    }
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
                
            }
        });
        thread.start();
        
        
        
    }
    

    
    
    public void respond(String msg) {
        out.println(msg);
        System.out.println("LOGR: " + msg);
    }
    

}

How can I fix that? Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文