?? chatkaro12mserver.java
字號:
import java.io.*;
import java.net.*;
import java.util.Vector;
import java.util.Enumeration;
public class chatkaro12mServer
{
//static String k=socket.getInetAddress().getHostName();
private int port=5001;
private boolean li=true;
private Vector clients=new Vector();
public static void main(String a[])
{
System.out.println(" Press ctrl-c to Quit.");
new chatkaro12mServer().server();
}
void server()
{
ServerSocket serverSock=null;
try
{
InetAddress serverAddr=InetAddress.getByName(null);
System.out.println("Waiting for"+ serverAddr.getHostName() +"on port"+port);
serverSock=new ServerSocket(port,50);
}
catch(IOException e)
{
System.out.println(e.getMessage()+":Failed");
return;
}
while(li)
{
try
{
Socket socket=serverSock.accept();
System.out.println("Accept "+ socket.getInetAddress().getHostName());
DataOutputStream remoteOut= new DataOutputStream(socket.getOutputStream());
clients.addElement(remoteOut);
new ServerHelper(socket,remoteOut,this).start();
}
catch(IOException e)
{
System.out.println(e.getMessage()+":Failed");
}
}
if(serverSock !=null)
{
try
{
serverSock.close();
}
catch(IOException x)
{
}
}
}
synchronized Vector getClients()
{
return clients;
}
synchronized void removeFromClients(DataOutputStream remoteOut)
{
clients.removeElement(remoteOut);
}
}
class ServerHelper extends Thread
{
private Socket sock;
private DataOutputStream remoteOut;
private chatkaro12mServer server;
private boolean li=true;
private DataInputStream remoteIn;
ServerHelper(Socket sock,DataOutputStream remoteOut,chatkaro12mServer
server) throws IOException
{
this.sock=sock;
this.remoteOut=remoteOut;
this.server=server;
remoteIn=new DataInputStream(sock.getInputStream());
}
public synchronized void run()
{
String s;
try
{
while(li)
{
s=remoteIn.readUTF();
broadcast(s);
}
}
catch(IOException e)
{
System.out.println(e.getMessage()+"connection lost");
}
finally
{
try
{
cleanUp();
}
catch (IOException x)
{
}
}
}
private void broadcast(String s)
{
Vector clients=server.getClients();
DataOutputStream dataOut=null;
for(Enumeration e=clients.elements();
e.hasMoreElements(); )
{
dataOut=(DataOutputStream)(e.nextElement());
if(!dataOut.equals(remoteOut))
{
try
{
dataOut.writeUTF(s);
}
catch(IOException x)
{
System.out.println(x.getMessage()+"Failed");
server.removeFromClients(dataOut);
}
}
}
}
private void cleanUp() throws IOException
{
if(remoteOut!=null)
{
server.removeFromClients(remoteOut);
remoteOut.close();
remoteOut=null;
}
if(remoteIn!=null)
{
remoteIn.close();
remoteIn=null;
}
if(sock!=null)
{
sock.close();
sock=null;
}
}
protected void finalize() throws Throwable
{
try
{
cleanUp();
}
catch(IOException x)
{
}
super.finalize();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -