点对点聊天简陋版

CharServer.java
import java.net.*;
import java.util.*;
import java.io.*;

public class ChatServer
{
    ServerSocket server 
= null;
    ArrayList
<ClientConn> clients = new ArrayList<ClientConn>();
    
    
public ChatServer(int port) throws Exception
    
{
        server 
= new ServerSocket(port);
    }

    
    
public void startServer() throws Exception
    
{
        
while(true)
        
{
            Socket s 
= server.accept();
            clients.add( 
new ClientConn(s) );
        }

    }

    
    
class ClientConn implements Runnable
    
{
        Socket s 
= null;
        
public ClientConn(Socket s)
        
{
            
this.s = s;
            (
new Thread(this)).start();
        }

        
        
public void send(String str) throws IOException
        
{
            DataOutputStream dos 
= new DataOutputStream(s.getOutputStream());
            dos.writeUTF(str);
        }

        
        
public void run()
        
{
            
try {
                
                DataInputStream dis 
= new DataInputStream(s.getInputStream());
                String str 
= dis.readUTF();
                
while(str != null && str.length() !=0)
                
{
                    System.out.println(str);
                    
for(Iterator<ClientConn> it = clients.iterator(); it.hasNext(); )
                    
{
                        ClientConn cc 
= (ClientConn)it.next();
                        
if(this != cc)    
                        
{
                            cc.send(str);
                        }

                    }

                    str 
= dis.readUTF();
                }

                s.close();
                clients.remove(
this);
            }
 
            
catch (IOException e) 
            
{
                System.out.println(
"client quit");
                
try 
                
{
                    
if(s != null)
                        s.close();
                    clients.remove(
this);
                }
 
                
catch (IOException ioe)
                
{
                    ioe.printStackTrace();
                }

            }

            
        }

    }

    
    
public static void main(String[] args) throws Exception
    
{
        ChatServer cs 
= new ChatServer(6666); //实例化一个服务器
        cs.startServer();    //启动服务器
    }

}


ChatClient.java
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

public class ChatClient extends Frame
{
    TextArea ta 
= new TextArea();
    TextField tf 
= new TextField();
    
public void launchFrame() throws Exception
    
{
        
this.add(ta, BorderLayout.CENTER);
        
this.add(tf, BorderLayout.SOUTH);
        tf.addActionListener(
            
new ActionListener() 
            
{
                
public void actionPerformed(ActionEvent ae)
                
{
                    
try {
                        String sSend 
= tf.getText();
                        
if(sSend.trim().length() == 0return;
                        ChatClient.
this.send(sSend);
                        tf.setText(
"");
                        ta.append(sSend 
+ "\n");
                    }

                    
catch (Exception e) { e.printStackTrace(); }
                }

            }

            );
        
        setBounds(
300,300,300,400);
        setVisible(
true);
        tf.requestFocus();
    }

    
    Socket s;
    
public ChatClient() throws Exception
    
{
        s 
= new Socket("127.0.0.1"6666);
        launchFrame();
        (
new Thread(new ReceiveThread(s))).start();
    }

    
    
public void send(String str) throws Exception
    
{
        DataOutputStream dos 
= new DataOutputStream(s.getOutputStream());
        dos.writeUTF(str);
    }

    
    
public void disconnect() throws Exception
    
{
        s.close();
    }

    
    
public static void main(String[] args) throws Exception
    
{
        BufferedReader br 
= new BufferedReader (
                                
new InputStreamReader(System.in));
        ChatClient cc 
= new ChatClient();
        String str 
= br.readLine();
        
while(str != null && str.length() != 0)
        
{
            cc.send(str);
            str 
= br.readLine();
        }

        cc.disconnect();
    }

    
    
class ReceiveThread implements Runnable
    
{
        
private Socket s;

        
public ReceiveThread(Socket s) {
            
this.s = s;
        }


        
public void run()
        
{
            
if(s == nullreturn;
            
try {
                DataInputStream dis 
= new DataInputStream(s.getInputStream());
                String str 
= dis.readUTF();
                
while (str != null && str.length() != 0)
                
{
                    ChatClient.
this.ta.append(str + "\n");
                    str 
= dis.readUTF();
                }

            }
 
            
catch (Exception e)
            
{
                e.printStackTrace();
            }

            
        }

    }

}

posted on 2008-09-15 01:30 nonels 阅读(612) 评论(2)  编辑  收藏 所属分类: J2SE

评论

# re: 点对点聊天简陋版 2015-12-21 23:54 更多时候该

来个人更好的更好  回复  更多评论   

# re: 点对点聊天简陋版 2015-12-21 23:55 更多时候该

@更多时候该
543543   回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿(2)

随笔分类(16)

随笔档案(16)

搜索

最新评论

阅读排行榜

评论排行榜