[英]Client server communication java
我在客户端服务器应用程序中有问题。 客户端向服务器发送图片,服务器以回复消息作为响应。
这是我的服务器代码:
public class Server
{
public static void main(String[] args) throws Exception
{
String response="response";
ServerSocket socket = new ServerSocket(3333);
while (true)
{
Socket clientSocket = socket.accept();
DataInputStream dis = new DataInputStream(clientSocket.getInputStream());
FileOutputStream fout = new FileOutputStream("output.jpg");
int i;
while ( (i = dis.read()) > -1)
fout.write(i);
DataOutputStream outToClient= new DataOutputStream(clientSocket.getOutputStream());
outToClient.writeBytes(response);
fout.flush();
fout.close();
dis.close();
outToClient.close();
clientSocket.close();
}
}
}
客户:
public static void main(String[] args) throws Exception
{
// TODO Auto-generated method stub
String sentence;
int i;
FileInputStream fis = new FileInputStream ("pathphoto.jpg");
Socket sock = new Socket ("hostname",3333);
DataOutputStream os = new DataOutputStream(sock.getOutputStream());
System.out.println("Sending....");
while ((i = fis.read()) > -1)
os.write(i);
BufferedReader inFromServer= new BufferedReader(new InputStreamReader(sock.getInputStream()));
sentence=inFromServer.readLine();
System.out.println("FROM SERVER: " + sentence);
fis.close();
os.close();
sock.close();
}
}
问题是客户端没有收到服务器的响应,我认为遵循以下原则:
BufferedReader inFromServer= new BufferedReader(new InputStreamReader(sock.getInputStream()));
sentence=inFromServer.readLine();
因为没有它们,服务器将发送响应。
关于如何解决它的任何建议?
它没有卡在BufferedReader中 ,实际上卡在了((i = fis.read())> -1)期间,因为您的客户端从未告知服务器流的长度,否则关闭的流服务器将尝试从inputstream读取下一个字节,并且客户端完成文件发送并等待服务器响应后,将卡住。
当您删除代码以从服务器读回响应时,客户端将继续并关闭所有流,在这种情况下,服务器将读取-1并继续。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.