java chat server

Συζητήσεις για την Java

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
iliadis
Δημοσιεύσεις: 24
Εγγραφή: 06 Φεβ 2009 01:10

java chat server

Δημοσίευση από iliadis » 13 Ιούλ 2009 00:50

λοιπον εχω ενα κωδικα για chat server. Ειναι δυο κλασεις server και serverthread.
ο server αυτος δημιουργει ενα instance και μετα για καθε νεο connection δημιουργει ενα thread για να χειριζεται καθε νεο user. οπιος μπει ομως μεσα μπαινει στο ιδιο chatroom.
Πιος ειναι ο ενδεδειγμενος τροπος για να δημιουργώ νεο chat room. να δημιουργώ νεο server instance το οποιο θα ακουει σε διαφορετικο port? Υπαρχει καλυτερος τροπος? Γιατι μπορει να υπαρχει κινηση και να δεσμευσω ολα τα ports. ο κωδικας ειναι:

Κώδικας: Επιλογή όλων

import java.io.*;
import java.net.*;
import java.util.*;
public class Server
{

private ServerSocket ss;
private Hashtable outputStreams = new Hashtable();
public Server( int port ) throws IOException {
listen( port );
}
private void listen( int port ) throws IOException {
ss = new ServerSocket( port );
System.out.println( "Listening on "+ss );
while (true) {
Socket s = ss.accept();
System.out.println( "Connection from "+s );
DataOutputStream dout = new DataOutputStream( s.getOutputStream() );
outputStreams.put( s, dout );
new ServerThread( this, s );
}
}

Enumeration getOutputStreams() {
return outputStreams.elements();
}

void sendToAll( String message ) {
synchronized( outputStreams ) {

for (Enumeration e = getOutputStreams(); e.hasMoreElements(); ) {
DataOutputStream dout = (DataOutputStream)e.nextElement();

try {
dout.writeUTF( message );
} catch( IOException ie ) { System.out.println( ie ); }
}
}
}
void removeConnection( Socket s ) {
synchronized( outputStreams ) {
outputStreams.remove( s );

try {
s.close();
} catch( IOException ie ) {
System.out.println( "Error closing "+s );
ie.printStackTrace();
}
}
}

static public void main( String args[] ) throws Exception {
int port = Integer.parseInt( args[0] );
new Server( port );
}
}

Κώδικας: Επιλογή όλων

import java.io.*;
import java.net.*;
public class ServerThread extends Thread
{

private Server server;
private Socket socket;
public ServerThread( Server server, Socket socket ) {

this.server = server;
this.socket = socket;

start();
}

public void run() {
try {

DataInputStream din = new DataInputStream( socket.getInputStream() );
while (true) {
String message = din.readUTF();
server.sendToAll( message );
}
} catch( EOFException ie ) {

} catch( IOException ie ) {

ie.printStackTrace();
} finally {

server.removeConnection( socket );
}
}
}

Απάντηση

Επιστροφή στο “Java”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες