繁体   English   中英

Java 客户端未收到 C# 服务器响应 TCP

[英]Java Client not receiving C# Server response TCP

有人可以向我解释我做错了什么。我第一次尝试在 Java 和 C# 之间实施 TCP:

服务器代码 c# `

public void CreateServer()
        {
            Thread thread = new Thread(() =>
            {
                IPAddress addr = IPAddress.Parse(localIP);
                tcpListener = new TcpListener(addr, 5053);
                if (tcpListener != null)
                {
                    tcpListener.Start();
                    while (!end)
                    {      
                        TcpClient tcpClient = tcpListener.AcceptTcpClient();
                        var ip = ((IPEndPoint)tcpClient.Client.RemoteEndPoint).Address.ToString();
                        Console.WriteLine("Client connected from "+ip);   
                        NetworkStream clientStream = tcpClient.GetStream();
                        StreamReader reader = new StreamReader(clientStream, Encoding.UTF8);
                        try
                        {
                            string request = reader.ReadToEnd();
                            Console.WriteLine("Message from client: " + request);

                            Byte[] StringToSend = Encoding.UTF8.GetBytes("Server");
                            clientStream.Write(StringToSend, 0, StringToSend.Length);
                            Console.WriteLine("Sending response back");
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e);
                        } 
                    }
                }
            });
            thread.Start();
        }

`

客户代码 java `

public class TCP {

    private String IP;
    private InetAddress server;
    private Socket socket;

    public TCP(String IP) {
        this.IP = IP;
    }

    protected void runTCP() {
        try {
            server = InetAddress.getByName(IP);
            socket = new Socket(server, 5053);
            System.out.println("Client connected. Listening on port 5053");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void sendMessage(String message) {
        try {
            System.out.println("Sending data...");
            if (socket.isClosed()) socket = new Socket(server, 5053);
            PrintWriter writer = new PrintWriter(socket.getOutputStream());
            writer.print(message);
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void getResponseServer() {
        Thread thread = new Thread() {
            @Override
            public void run() {
                try {
                    System.out.println("Attempting to get response...");
                    if (socket.isClosed()) socket = new Socket(server, 5053);
                    BufferedReader mBufferIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    String mServerMessage = mBufferIn.readLine();
                    System.out.println("Server message: " + mServerMessage);
                } catch (Exception e) {e.printStackTrace();}
            }
        };
        thread.start();
    }
}

`

服务器上的 Output 当从客户端向服务器发送“你好”时我得到: Client connected from 192.16.... Message from client: Hello Sending response back Client connected from 192.16....

客户端上的 Output: Client connected. Listening on port 5053 Sending data... Attempting to get response... Client connected. Listening on port 5053 Sending data... Attempting to get response...从未得到响应...为什么?

尝试研究但一无所获,尝试了其他代码但也没有用......

对不起,我不能发表评论。 也许您可以使用te.net命令来验证 c# 代码是否正确。

telnet ip port

先定位问题,再解决问题。

如果服务器没问题,我们可以使用nc命令验证客户端代码,我测试了你的java代码,除了每次发送数据都会关闭套接字,其他都可以。

通过删除导致套接字关闭的 writer.close() 原因修复它,并通过再次创建使服务器等待 stream 数据并且客户端等待响应的套接字与服务器建立另一个连接...

        System.out.println("Sending data...");
        PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
        writer.println(message);

        InputStream input = socket.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(input));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM