Java 客户端从服务器向客户端发送大字符串(BASE64映像)
我在客户端和服务器之间通过套接字进行通信时遇到问题。 C#中的Java服务器和客户端。当我向我的C#客户机发送一个String 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
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?请参阅