我有一个Android应用程序通过TCP套接字与我编写的服务器进行通信。我现在用来读取和写入输出的方法适用于较小的字符串(最大60kB),但是当字符串比这长得多时,我会抛出一个异常。以下是我对服务器和客户端的相关部分:
服务器:
DataInputStream dis = null;
DataOutputStream dos = null;
try {
dis = new DataInputStream(server.getInputStream());
dos = new DataOutputStream(server.getOutputStream());
String input = "";
input = dis.readUTF();
handle_input info = new handle_input(input, id);
String xml = info.handle();
dos.writeUTF(xml);
server.close();
}
客户端:
Socket socket = null;
DataOutputStream dos = null;
DataInputStream dis = null;
Boolean result;
try {
socket = new Socket(ip, port);
dos = new DataOutputStream(socket.getOutputStream());
dis = new DataInputStream(socket.getInputStream());
dos.writeUTF(the_text);
String in = "";
while (in.equals("")) {
in += dis.readUTF();
}
}
如何修改它以处理潜在的巨大字符串?我一直在四处寻找,似乎找不到明确的答案。
感谢。
答案 0 :(得分:6)
如果查看writeUTF()
的{{3}},很明显该方法只能处理最多65535个编码字节的字符串。 (编码形式以2个字节开头,给出字符串字节数。)
您的选择是:
String.toCharArray()
,所有这些都需要在实际数据之前加上一个计数来告诉对方多少期待/读取。
另一种方法是使用Writer
和Reader
代替DataOutputStream
和DataInputStream
以文本形式发送/接收数据。
答案 1 :(得分:0)
使用以下内容发送数据:
Socket s = new Socket();
s.connect(new InetSocketAddress("IP_addr_,Port_no));
OutputStream os = s.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.println("String");