📄 chatserver.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;
import java.util.*;
public class ChatServer
{
private static ServerSocket ssocket;
private static int port;
private static int cport=4000;
private static String serverQuit="No";
Hashtable hst=new Hashtable();
JPanel jpanel=new JPanel(new FlowLayout());
JTextArea jtextarea=new JTextArea(16,28);
JScrollPane jscrollpane=new JScrollPane(jtextarea);
JButton jbutton=new JButton("Quit");
JFrame jframe=new JFrame("Chat Server");
public static void main(String args[]) throws Exception
{
int defaultport=1234;
if(args.length==0)
{
port=defaultport;
}
else
{
port=Integer.parseInt(args[0]);
}
new ChatServer();
}
public ChatServer() throws Exception
{
jtextarea.setEditable(false);
jtextarea.setText("Server start at ");
jpanel.add(jscrollpane);
jpanel.add(jbutton);
jframe.getContentPane().add(jpanel);
jframe.setSize(320,367);
jframe.show();
jbutton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
jframe.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
serverQuit="Quit";
System.exit(0);
}
});
try
{
ssocket=new ServerSocket(port);
String message=jtextarea.getText();
jtextarea.setText(message+ssocket.getInetAddress().getLocalHost()+":"+ssocket.getLocalPort()+"\n");
while(true)
{
Socket csocket=ssocket.accept();
BufferedReader brin=new BufferedReader(new InputStreamReader(csocket.getInputStream()));
String na=brin.readLine();
String name=na.substring(5);
System.out.println(name);
message=jtextarea.getText();
jtextarea.setText(message+"Connection from "+name+"\nHis TCP port is "+port+"\n"+"\n");
DataOutputStream dos=new DataOutputStream(csocket.getOutputStream());
dos.writeBytes("WELCOME"+' '+cport+'\n');
dos.flush();
hst.put(csocket,dos);
Thread thread=new Thread(new Jabber(csocket, name, cport, dos, hst, serverQuit));
thread.start();
cport++;
}
}
catch (IOException e){}
}
}
class Jabber extends Thread implements Runnable
{
private Socket csocket;
private Hashtable hst;
int port;
String name;
String message;
String serverquit;
DataOutputStream dos;
public Jabber(Socket socket, String names, int cport, DataOutputStream ds, Hashtable ht, String serverQuit)
{
csocket=socket;
name=names;
port=cport;
dos=ds;
hst=ht;
serverquit=serverQuit;
}
public void run()
{
DataInputStream dis;
int maxpacketsize=65507;
byte[] buffer=new byte[maxpacketsize];
try
{
DatagramSocket server=new DatagramSocket(port);
while(true)
{
DatagramPacket packet=new DatagramPacket(buffer,buffer.length);
try
{
server.receive(packet);
message=new String(packet.getData(),0,packet.getLength());
packet.setLength(maxpacketsize);
synchronized(hst)
{
for(Enumeration e=hst.elements(); e.hasMoreElements();)
{
dos=(DataOutputStream)e.nextElement();
try
{
dos.writeBytes(message+'\n');
}
catch (IOException x){}
}
}
}
catch (IOException ex){}
}
}
catch(SocketException exc){}
finally
{
synchronized(hst)
{
hst.remove(csocket);
try
{
csocket.close();
}
catch (IOException x){System.out.println(x);}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -