「クライアントのIPアドレスとサーバーへの接続回数を表示するブラウザにHTTP応答を返すTCPサーバーであるJavaプログラムを作成する」ことを試みています
現在、私が考えていることが起こっています。サーバーを作成し、リクエストのポート (引数としての入力) をリッスンしてから、バイト配列を埋めて、その配列を文字列に変換しています。この時点でリクエストを確認したいと思います。
私の問題は、Webブラウザにアクセスして「localhost:1235」と入力してこのサーバーに接続しようとすると、ブラウザが「接続中...」と言い続け、プログラムが何もせず、ただ座って待つことです。
この残りの部分を修正/実装するにはどうすればよいですか? 私の現在の問題は何ですか?
これまでのところ、ここに私のコードがあります
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPHTTP
{
private static final int MAXFILELEN = 4096000;
static byte[] request = new byte[MAXFILELEN];
static String[] log;
public static void main (String args[])
{
if (args.length != 1)
throw new IllegalArgumentException( "Parameter(s): <Port>");
int port = Integer.parseInt(args[0]);
ServerSocket socket = null;
Socket sock = null;
try
{
socket = new ServerSocket(port);
}
catch (IOException e)
{
return;
}
for (;;)
{
try
{
sock = socket.accept();
InputStream is = sock.getInputStream();
int offset = 0;
int len = 0;
while ((len = is.read(request, offset, MAXFILELEN - offset)) >= 0)
{
offset += len;
}
String s = new String(request);
System.out.println(s);
// Add the users IP to the log
String from = "From: ";
int loglen = log.length;
int indexOfSenderIP = s.indexOf(from, 0);
indexOfSenderIP += from.length();
int indexOfNewline = s.indexOf("\n", indexOfSenderIP);
String sendersIP = s.substring(indexOfSenderIP, indexOfNewline);
log[loglen] = sendersIP;
//Find out how many times the sender IP appears in the log
int timesVisited = 0;
for(int i = 0; i < log.length; i++)
if(log[i].endsWith(sendersIP))
timesVisited++;
// Construct the HTTP response message
String httpResponse = "";
OutputStream os = sock.getOutputStream();
os.write(httpResponse.getBytes());
os.close();
is.close();
sock.close();
}
catch (IOException e)
{
break;
}
}
}
}