gpt4 book ai didi

java - 发送文件的客户端/服务器卡在某处

转载 作者:行者123 更新时间:2023-12-01 13:48:15 25 4
gpt4 key购买 nike

我已经实现了一个客户端/服务器来发送文件。当发送文件后不再交换消息时,代码可以正常工作,但是如果客户端在接收文件的代码之后直接向服务器发送一些字符串,则客户端和服务器都会停止执行任何操作并且文件不会发送,这是有问题的就像他们都陷入僵局一样,但我不太确定:

下面是发送文件而不发送任何内容的代码,该代码有效:客户端

String filename;
BufferedReader UIn = new BufferedReader(new InputStreamReader(System.in));
Socket peer = new Socket("localhost",9999);
System.out.print("Enter the file name to download :");
filename= UIn.readLine();

///////////////////////////////

DataOutputStream OutToServer;
OutToServer = new DataOutputStream(peer.getOutputStream());
OutToServer.writeBytes(filename+"\n");

FileOutputStream fos = new FileOutputStream(new File("D:/new.txt"));
BufferedOutputStream out = new BufferedOutputStream(fos);
InputStream in = peer.getInputStream();
buffer = new byte[1024];

while((count=in.read(buffer))>0)
{
fos.write(buffer, 0, count);
System.out.println(buffer);
}

fos.close();
System.out.println("done");

服务器:

ServerSocket server =null; 
try {
server = new ServerSocket(9999);
while(true)
{
client= server.accept();
//System.out.println("Connection accepted");
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(client.getInputStream()));
DataOutputStream outToclient =new DataOutputStream(client.getOutputStream());
String request=inFromClient.readLine();
file = new File(request);

if (file.exists())
{
OutputStream out = client.getOutputStream();
BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));

while((count =in.read(buffer)) >0)
{
out.write(buffer,0,count);
out.flush();
}
}

// System.out.println(request);
// outToclient.writeBytes("alaa\n");

}
} catch (IOException ex) {
Logger.getLogger(ServerWork.class.getName()).log(Level.SEVERE, null, ex);
}

但是,如果我尝试在客户端和服务器之间的循环之后发送任何内容,它就会停止工作。是因为我使用了 readLine()writeBytes() 吗?

最佳答案

您正在使用 DataOutputStream and OutputStream 。我认为他们应该一起工作,但我想你应该做的是刷新缓冲区(或关闭它)。

After you're done writing everything you want to send, some data may still be in the buffer. Now you will have to flush the buffer, to force it to send all the data.(as it is said here).

outToclient.writeBytes("alaa\n");
outToclient.flush();

关于java - 发送文件的客户端/服务器卡在某处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20177938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com