如果我有服务器和客户端,我在两者之间打开了一个套接字:
1.客户端是否有可能有一个printWriter流,以便将内容写入套接字,但服务器在同一时间内不会有一个bufferReader?
谢谢
答案 0 :(得分:5)
这完全不是Java特有的,而是TCP/IP
。存在用于保持接收数据的缓冲器,因此不可能丢失某些数据,因为一端不准备"然而。这是因为TCP
将重新传输尚未被确认为已接收的数据,从而保证所有写入的字节都在另一个上接收(除非有明显的情况)。
答案 1 :(得分:0)
除了@Kayaman的回答:
考虑这个可编译的简单Java实现示例:
服务器端:
import java.io.*;
import java.net.*;
public class SimpleServer implements Runnable{
int serverPort = 45000;
ServerSocket serverSocket = null;
boolean isStopped = false;
public SimpleServer(int port){
this.serverPort = port;
}
public void run(){
try {
serverSocket = new ServerSocket(serverPort);
} catch (IOException e) {
System.err.println("Cannot listen on this port.\n" + e.getMessage());
System.exit(1);
}
while(!isStopped){
try {
Socket clientSocket = serverSocket.accept();
} catch (IOException e) {
// do nothing
}
}
}
public static void main(String[] args) throws IOException {
SimpleServer server = new SimpleServer(45000);
new Thread(server).start();
System.out.println("Server is waiting to connect");
}
}
客户端:
import java.io.*;
import java.net.*;
public class SimpleClient {
public static void main(String[] args) throws IOException {
Socket socket = null;
PrintWriter out = null;
try {
socket = new Socket("127.0.0.1", 45000);
out = new PrintWriter(socket.getOutputStream(), true);
System.out.println("output stream created");
out.write(9);
System.out.println("message was sent to output with no listener");
} catch (UnknownHostException e) {
// do nothing
} catch (IOException e) {
// do nothing
}
}
}
该示例是 very 基本客户端服务器连接的实现,其中创建套接字并且仅在客户端定义流,然后写入最终将成为流的流由服务器读取(如果有的话)。
因此,回答你的问题:
1)是的,可以在没有"听众的情况下打开单向连接流"
2)编辑:根据@EJP:它将被保存在套接字缓冲区中,直到它被读取或套接字被关闭。