这是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得到整个字符串所以我假设你没有得到新的行。如果我错了,请纠正我。感谢名单
答案 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);
}