в основном html-файл, который запрашивает изображение с сервера, и я создаю сервер, который выполняет материал ответа, но когда html-запрос для изображения сервер отправляет изображение полностью но клиентский браузер остается при загрузке изображения и говорит «передача данных с сервера», у меня были исследования по всему Интернету, и я обнаружил, что могу сделать это, только закрыв соединение, но это не сработало для меня.как отправить EOF через сокет в java
Вот код для моего сервера построить в Java:
package lesson1;
import java.io.*;
import java.net.*;
import java.lang.Exception;
public class SecClass{
BufferedReader fd;
String link = null, HTMLData = null, WEBROOT = "D:/PDT1";
String ptr = null, directory = null,
GET_HEAD_POST = null, Protocol = null;
ServerSocket SRVSOCK;
Socket SOCK;
DataOutputStream dOut;
DataInputStream dInput;
InputStreamReader IR;
public static void main(String[] args) throws Exception
{
SecClass SERVER = new SecClass();
SERVER.run();
}
public void run() throws Exception
{
SRVSOCK = new ServerSocket(80);
while(true){
SOCK = SRVSOCK.accept();
new Thread(new SocketThread(SOCK)).start();
}
}
public class SocketThread implements Runnable {
@SuppressWarnings("unused")
private Socket socket;
public SocketThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try{
dOut = new DataOutputStream(SOCK.getOutputStream());
}catch(Exception ie){
System.out.println("Cound'nt create dOut");
}
try{
IR = new InputStreamReader(SOCK.getInputStream());
}catch(Exception ie){
System.out.println("Cound'nt create IR");
}
BufferedReader BR = new BufferedReader(IR);
String MESSAGE = null;
System.out.println("Received Request!");
try{
MESSAGE = BR.readLine();
}catch(Exception ie){
System.out.println("Cound'nt Receive Message");
}
System.out.println(MESSAGE);
if(MESSAGE != null && MESSAGE.contains("HTTP/")){
Protocol = MESSAGE.substring(MESSAGE.length()-8);
System.out.println("Request protocol is " + Protocol);
} else {
System.out.println("It's a Not HTTP request");
}
if(MESSAGE != null && MESSAGE.contains("GET ")){
GET_HEAD_POST = "GET ";
System.out.println("Reqest is GET");
ptr = MESSAGE.substring(4);
directory = ptr.substring(0,ptr.length()-9);
link = ptr.substring(ptr.length() - 10);
System.out.println(link);
} else if(MESSAGE != null && MESSAGE.contains("HEAD ")){
System.out.println("Request is HEAD");
GET_HEAD_POST = "HEAD ";
ptr = MESSAGE.substring(5);
directory = ptr.substring(0,ptr.length()-9);
link = ptr.substring(ptr.length() - 10);
} else if(MESSAGE != null && MESSAGE.contains("POST ")){
System.out.println("Request is POST");
} else {
System.out.println("Cound'nt verify request");
try{
SRVSOCK.close();
}catch(Exception ie){
System.out.println("Could not close SRVSOCK");
}
try{
SOCK.close();
}catch(Exception ie){
System.out.println("Could not close SOCK");
}
}
if(MESSAGE == null)
{
System.out.println("Unknown request");
try{
SOCK.close();
}catch(Exception ie){
System.out.println("Could not close SOCK");
}
} else {
if((link.charAt(0)) == '/' && link != null){
link = WEBROOT + directory + "index.html";
try{
OpenFile();
dOut.close();
SOCK.close();
System.out.println("Came out of Openfile Func");
}catch(Exception ie){
System.out.println("Could not Call for OpenFile Function");
}
try{
MESSAGE = BR.readLine();
}catch(Exception ie){
System.out.println("Could not Receive message");
}
System.out.println(MESSAGE);
} else {
System.out.println("User Requested for a file");
System.out.println(directory);
link = WEBROOT + directory;
try{
OpenFile();
dOut.close();
SOCK.close();
}catch(Exception ie){
System.out.println("Could not Call for OpenFile Function");
}
}
}
}
}
public void OpenFile() throws Exception{
try (BufferedReader br = new BufferedReader(new FileReader(link))) {
String line;
System.out.println("Request Link is: " + link);
while ((line = br.readLine()) != null) {
System.out.println(line);
dOut.writeBytes(line);
}
dOut.flush();
dOut.close();
SOCK.close();
} catch(Exception e){
System.out.println(link);
dOut.writeBytes("<html><h1>404 File Not Found</h1></html>");
System.out.println("File Does not Exist");
}
}
}
и вот мой HTML код:
<html>
<head>
<meta charset="utf-8"/>
<title>hello</title>
</head>
<body>
<header>
<div class="HeaderBox">
<img src="logo.png" alt="image" class="logoBox"/>
</div>
</header>
</body>
</html>
, как вы можете видеть, я пытался дважды, чтобы закрыть соединение на сервер, когда изображение полностью переносится, но в моем браузере он застревает в загрузке, а внизу он говорит, что передача данных из 127.0.0.1
Вы также можете публиковать сообщения в журнале? –
да «получен запрос GET /logo.png HTTP/1.1 протокол запроса является HTTP/1.1 Reqest является GET г HTTP/1.1 пользователя запрошено для файла /logo.png запрос ссылка: D:/PDT1/logo.png " и есть бит во время чтения строки за строкой и вывода его –
вы можете перемещать все поля, кроме ServerSocket SRVSOCK; Socket SOCK; от класса SecClass до класса SocketThread.Теперь попробуйте проверить и сообщить статус –