Hej!
Jag sitter och försöker implementera ett system som ska mäta tiden för olika sätt att skicka meddelanden med hjälp utav java.
Ett av kraven är att vi skall använda port 9000 för klienter och port 10000 för servrarna. I första testet skapar jag nya sockets vid varje iteration och skickar över ett meddelande som jag skapat tidigare med följande kod
Klientkoden:
InetAddress address = InetAddress.getByName("localhost");
byte[] passing = this.getMessageWithSize(size);
for(int i=0;i<repetitions;i++)
{
//Creates a socket to the local host at the default server port and writes a message
//Start timing
timeStart = System.currentTimeMillis();
Socket clientSocket = Socket clientSocket = new Socket(address, DEFAULT_SERVER_PORT, address, DEFAULT_CLIENT_PORT);
BufferedOutputStream out = new BufferedOutputStream(clientSocket.getOutputStream(),size);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()),size);
out.write(message);
out.flush();
//Reads the the reply
response = in.readLine();
in.close();
out.close();
clientSocket.close();
//Stop timing
timeEnd = System.currentTimeMillis();
System.out.println("#"+i+": Response from from server: Read "+response.length()+" of bytes/characters. One round robin: "+(timeEnd - timeStart)+" msec");
totalTime = totalTime + timeEnd - timeStart;
}
Serverkoden
char[] result = new char[size];
ServerSocket server = new ServerSocket(DEFAULT_SERVER_PORT);
for(int i=0; i<repetitions; i++)
{
//Creates a socket at default server port that listens to requests.
Socket serverSocket = server.accept();
BufferedReader in = new BufferedReader( new InputStreamReader(serverSocket.getInputStream()));
BufferedOutputStream out = new BufferedOutputStream(serverSocket.getOutputStream(),size);
request = in.readLine();
System.out.println("#"+i+": Request from client: Read "+request.length()+" characters.");
request = request.concat("\n");
//Writes back to the same socket
out.write(request.getBytes());
out.flush();
in.close();
out.close();
serverSocket.close();
}
server.close();
Problemet med detta är att det fungerar endast mellan 20 och 200 ggr, sen säger får jag ett exception som lyder:
Java.net.bindException - Address already in use
Någon som har någon pejling på vad jag kan ändra? Det verkar som att socket:en inte stängs riktigt, utan att den ligger kvar ett tag.