?? chatserver.java~25~
字號:
package chatServer;
import chatServer.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
import chatServer.*;
import javax.swing.tree.*;
public class ChatServer extends WindowAdapter implements ActionListener,Runnable {
private JFrame f = null;
private JPanel p1 = null;
private JButton button_start = null;
private JPanel p2 = null;
private JTree tree = null;
private DefaultTreeModel treeModel=null;
private DefaultMutableTreeNode root=null;
private JLabel revMsgLabel;
private JPanel p3 = null;
public JTextArea revMsg = null;//public for ServerThread
private JButton button_clear = null;
private BorderLayout borderLayout1 = new BorderLayout();
private BorderLayout borderLayout2 = new BorderLayout();
private BorderLayout borderLayout3 = new BorderLayout();
private ServerSocket ss;
private Socket sock;
private DataInputStream in;
private DataOutputStream dout;
private UsrContainer usrList;
public ChatServer(Socket sock)
{
this.sock=sock;
}
public ChatServer()
{
usrList=new UsrContainer();
f = new JFrame("ChatServer");
Container contentPane = f.getContentPane();
f.setSize(400, 500);
contentPane.setLayout(borderLayout1);
p1 = new JPanel();
button_start = new JButton("Start Server");
//button_start.setPreferredSize(new Dimension(60, 30));
button_start.addActionListener(this);
p1.add(button_start);
f.add(p1, borderLayout1.NORTH);
p2 = new JPanel();
p2.setSize(100, 400);
root = new DefaultMutableTreeNode("User List");
tree = new JTree(root);
treeModel=(DefaultTreeModel)tree.getModel();
JScrollPane scrollPane=new JScrollPane();
scrollPane.setViewportView(tree);
scrollPane.setPreferredSize(new Dimension(120, 768));
p2.add(scrollPane);
f.add(p2, borderLayout1.WEST);
p3 = new JPanel();
revMsg = new JTextArea();
revMsg.setLineWrap(true);
JScrollPane revScrollPane = new JScrollPane(revMsg);
revMsg.setEditable(false);
button_clear = new JButton("clear");
button_clear.addActionListener(this);
JPanel p_3_1 = new JPanel();
revMsgLabel = new JLabel("消息列表:");
p_3_1.setLayout(borderLayout2);
p_3_1.add(revMsgLabel, borderLayout2.NORTH);
p_3_1.add(button_clear, borderLayout2.SOUTH);
p_3_1.add(revScrollPane, borderLayout2.CENTER);
f.add(p_3_1, borderLayout1.CENTER);
f.show();
f.addWindowListener(this);
}
private void listen( int port ) throws IOException {
// Create the ServerSocket
ss = new ServerSocket( port );
// Keep accepting connections forever
while (true) {
// Grab the next incoming connection
Socket s = ss.accept();
revMsg.setText( revMsg.getText()+"\n"+"Connection from "+s );
DataInputStream tmpin = new DataInputStream( s.getInputStream() );
// Create a DataInputStream for writing usrNick come
String usrNick = tmpin.readUTF();
// Create a DataOutputStream for writing data to the
// other side
DataOutputStream dout = new DataOutputStream( s.getOutputStream() );
// Save this stream so we don't need to make it again
UserInfo usr=new UserInfo(usrNick,s,dout);
usrList.addUser(usr);
revMsg.setText( revMsg.getText()+"\n"+usrList.getUsrNum() );
// Create a new thread for this connection, and then forget
// about it
new ServerThread( this,s).start();
}
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button_start)
{
if(button_start.getText().equals("Start Server"))
{
new Thread(this).start();
}
}
}
public void run()
{
try{
listen(10000);
}
catch( IOException ie )
{
revMsg.setText( revMsg.getText()+"\n"+ie.toString());
}
}
public void sendToAll(String message)
{
int i=0;
for(i=0;i<usrList.getUsrNum();i++)
{
try{
usrList.getUsr(i).sendToUsr(message);
}
catch( IOException ie )
{
revMsg.setText( revMsg.getText()+"\n"+"Sending "+message);
}
}
}
public void removeConnection(Socket socket)
{
try
{
UserInfo tmp = new UserInfo(socket);
usrList.delUser(tmp);
socket.close();
}
catch(IOException ie)
{
revMsg.setText(revMsg.getText()+"\n"+ie.toString());
}
}
public static void main(String[] args) {
ChatServer chatclient = new ChatServer();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -