我正在Java
编写客户端 - 服务器应用程序。程序如下:
客户端使用
向注册节点发送HTTP格式的消息注册节点向服务器发送格式相似的消息。
客户端和服务器可以通话(非常像SIP)。
目前,我已经创建了客户端和服务器的套接字,但是如果我想使用DataInputStream和DataOutputStream来输入和输出数据,我还需要确定数据类型,因为像DataInputStream这样的readDouble方法。
我不知道该怎么做。
很抱歉,如果我的描述有点含糊不清,请在此处传输一些示例消息。
REGISTER john@google.com SIPL/1.0CRLF
To: john@google.comCRLF
From: john@google.comCRLF
Call-ID: a74fbCRLF
CSeq: 0CRLF
Expires: 200CRLF
Contact: 74.125.226.161:20132CRLF
CRLF
SIPL/1.0 200 okCRLF
To: barney@google.comCRLF
From: 74.125.226.161:20300CRLF
Call-ID: 9934bcd2CRLF
CSeq: 10CRLF
Content-Length: 21CRLF
Contact: 74.125.226.161:20305CRLF
CRLF
file=foo
characters=10
任何申请都将非常感谢!!!
答案 0 :(得分:1)
由于您正在阅读ASCII文本,并且必须处理换行符,因此您可以使用读者和编写者,并使用java.io.BufferedReader
读取您的数据,这样您就可以逐行阅读。
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = reader.readLine();
StringBuilder buffer = new StringBuilder();
while ( line != null) {
buffer.append(line);
line = reader.readLine();
// you can check here if the line is empty and decide only to read the header
// or to split your header and body into different buffers
}
String fullText = buffer.toString();
如果您发送文本数据,您也可以使用类似的内容:
PrintWriter writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.println("GET / HTTP/1.1");
writer.println("Header: value");
writer.println(); // end of header
...
writer.flush(); // if you need to flush the buffer before closing
writer.close(); // when done - flushes and closes
使用try-catch-finally
中的close()
方法将所有内容放在finally
块中(或者,如果您使用Java 7,则尝试使用资源)