Java 客户端从服务器向客户端发送大字符串(BASE64映像)

Java 客户端从服务器向客户端发送大字符串(BASE64映像),java,c#,sockets,server,Java,C#,Sockets,Server,我在客户端和服务器之间通过套接字进行通信时遇到问题。 C#中的Java服务器和客户端。当我向我的C#客户机发送一个String Base64类型的映像时,我的程序由于字符串的大小而崩溃 void ecouteur(string commande) { try { IPEndPoint ip = new IPEndPoint (IPAddress.Parse ("127.0.0.1"), 1234); System.Net.So

我在客户端和服务器之间通过套接字进行通信时遇到问题。 C#中的Java服务器和客户端。当我向我的C#客户机发送一个String Base64类型的映像时,我的程序由于字符串的大小而崩溃

void ecouteur(string commande) {

        try {
            IPEndPoint   ip = new IPEndPoint (IPAddress.Parse ("127.0.0.1"), 1234);
            System.Net.Sockets.Socket sock = new System.Net.Sockets.Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            sock.Connect (ip);
            byte[] data = new byte[2024];
            int receivedDataLength = sock.Receive (data);
            String temp = Base64Decode( Encoding.ASCII.GetString (data, 0, receivedDataLength));



            sock.Shutdown (SocketShutdown.Both);
            sock.Close ();

        } catch (SocketException e1) {

            Console.WriteLine ("****Unable to connect to server.****\n" + e1);
            //sock.Shutdown (SocketShutdown.Both);
            sock.Close ();
        }
}

为什么要使用字符串来移动数据?数据是纯二进制的,应该以二进制格式发送。顺便说一句,您不太可能像上面尝试的那样在一个
receive
中接收所有数据。对
Receive
的单个调用可能只会产生一个字节的数据流,该数据流可能会更长。在我看来,上面的代码“由于字符串的大小而崩溃”的可能性很小,因为该字符串最大为2048字节。更有可能的是,你在一切到来之前就辞职了。您需要进行多次接收,并且还需要某种协议来指示何时完全接收到完整数据。这可能意味着在有效负载之前发送一个长度字段,或者关闭连接以指示完成。为什么不使用HTTP?请参见为什么使用字符串移动数据?数据是纯二进制的,应该以二进制格式发送。顺便说一句,您不太可能像上面尝试的那样在一个
receive
中接收所有数据。对
Receive
的单个调用可能只会产生一个字节的数据流,该数据流可能会更长。在我看来,上面的代码“由于字符串的大小而崩溃”的可能性很小,因为该字符串最大为2048字节。更有可能的是,你在一切到来之前就辞职了。您需要进行多次接收,并且还需要某种协议来指示何时完全接收到完整数据。这可能意味着在有效负载之前发送一个长度字段,或者关闭连接以指示完成。为什么不使用HTTP?请参阅