使用转义字符时无法发送完整的字符串

时间:2014-02-05 12:52:25

标签: java escaping

这是TCPServer的一个简单实现,我想要做的就是在请求时将字符串发送到客户端。

import java.util.*;
import java.io.*;
import java.net.*;
class TCPServer{
    public static void main(String args[]) throws Exception{
    ServerSocket server = new ServerSocket(4888);
    while(true){
        Socket client = server.accept();
        DataOutputStream out = new DataOutputStream(client.getOutputStream());
        String send = "Bhushan Patil \n 11-237 \n CMPN";
        out.writeBytes(send);
        }
    }
}

但是在clinet方面,只有Bhushan Patil显示的不是弦乐的其余部分。

以下是客户代码。

import java.util.*;
import java.io.*;
import java.net.*;
class TCPClient{
    public static void main(String args[]) throws Exception{
    Socket client = new Socket("localhost",4888);
    BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream    ()));
    String display = in.readLine();
    System.out.println(display);
}
}

任何人都能解释为什么会这样吗? 当我做的时候

System.out.println(send);

我用\ n得到整个字符串所以我假设你没有得到新的行。如果我错了,请纠正我。感谢名单

3 个答案:

答案 0 :(得分:2)

更新客户端代码,如下所示:

 String  display = null  
 while ((display = in.readLine()) != null)
  {
       System.out.println(display );
  }  

答案 1 :(得分:1)

readLine读取以换行符终止的所有传入输入数据。因此,您需要在循环中连续读取客户端的输入。

while ((display = in.readLine()) != null) {
    System.out.println(display);
}

还要确保从服务器关闭客户端套接字以按Oracle's Sample Server

结束连接
client.close();

答案 2 :(得分:0)

因为in.readLine()只读取第一行 你不是在阅读其余部分。 你需要循环抛出bufferreader来读取所有行 System.out.println(send)中的输出是

Bhushan Patil 
 11-237 
 CMPN  

其中包含将您的字符串划分为多行的新行字符,.readLine()函数一次只读取一行。

您可以使用.read(char[] cbuf,int off,int len)阅读文字 例如:

char[] cbuf = new char[1024];
while (in.read(cbuf, 0, cbuf.length) != null) {
      String str =  new String(cbuf);  
      System.out.print(str);
}