有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

c#Java Tcp服务器和。Net Tcp客户端的发送和接收问题

我计划用C#编写一个Java TCP服务器和一个客户端。网 我选择Java作为服务器,因为我有能力在Linux上运行服务器。 我的问题是。NET客户端可以连接到服务器,但是如果我向服务器发送了一些东西,服务器就不会收到任何东西

这是我的客户:

    static void Main(string[] args)
    {
        try
        {
            System.Net.Sockets.TcpClient tcpclnt = new System.Net.Sockets.TcpClient();
            Console.WriteLine("Connecting.....");

            tcpclnt.Connect("192.168.178.26", 1337);

            Console.WriteLine("Connected");
            Console.Write("Enter the string to be transmitted : ");

            String str = Console.ReadLine();
            Stream stm = tcpclnt.GetStream();

            ASCIIEncoding asen = new ASCIIEncoding();
            byte[] ba = asen.GetBytes(str);
            Console.WriteLine("Transmitting.....");

            stm.Write(ba, 0, ba.Length);
            stm.Flush();

            byte[] bb = new byte[100];
            int k = stm.Read(bb, 0, 100);

            for (int i = 0; i < k; i++)
                Console.Write(Convert.ToChar(bb[i]));

            tcpclnt.Close();
        }

        catch (Exception e)
        {
            Console.WriteLine("Error..... " + e.StackTrace);
        }
    }

这是我的服务器:

public static void main(String argv[]) throws Exception
{
    String clientSentence;
    String capitalizedSentence;

    ServerSocket socket = new ServerSocket(1337);

    while(true)
    {
        System.out.println("... Server gestartet");
        Socket connectionSocket = socket.accept();
        BufferedReader inputFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
        System.out.println(connectionSocket.getRemoteSocketAddress());
        DataOutputStream outputStream = new DataOutputStream(connectionSocket.getOutputStream());
        clientSentence = inputFromClient.readLine();
        System.out.println("Received: " + clientSentence);
        capitalizedSentence = clientSentence.toUpperCase() + "\n";
        outputStream.writeBytes(capitalizedSentence);
    }
}

我测试的代码只是测试与Java服务器连接的原型。 我还计划用iOS和Windows Phone与Java Tcp服务器通信。 所以我希望你们中的任何人都能给我一个答案


共 (1) 个答案

  1. # 1 楼答案

    您的客户机发送一行的字节,并等待响应,从而保持流的打开状态

    ReadLine返回之前,服务器等待换行符(或流的结束,即连接正在关闭)。所以双方都在等待对方

    我建议您在客户端使用OutputStreamWriter环绕流,然后您可以非常简单地使用WriteLine(而不是自己乱搞编码)。当服务器看到线路中断时,它会做出响应。我还会在客户机上使用InputStreamReader,而不是在每个字节上调用Convert.ToChar。从根本上说,如果你只对传输文本感兴趣,并且乐于使用“一行”作为消息传递的单位,那么在两侧使用一对写/读器是最简单的方法