p2p网站即时通信 简单飞扬

   任务: p2p网站即时通信

    先做出多线程的简单通信
    再连接到 项目上
    然后以P2P替换

   服务器端能够把一个客户的信息 传递给另一个用户

    单线程 实时发送 图形化界面
    服务器可同时接受多个客户端的请求
   
    每一个人上线的时候  会启动一个服务器

(接收显示)如果有人往这个服务器里面发消息了 就把聊天窗口显示出来   
    这个窗口里面显示的 就是与这个人的聊天内容 包括收到和发出的信息

(发送显示)如果点击在线人员列表 也弹出一个同样的聊天对话框

    实现接收或者发送消息时 弹出聊天对话框:
    用户建立了与服务器的连接 就会有一个聊天面板   点击隐藏可以让其消失Frame.setVisiblefalse)
     在接收或者发送的管道里如果有数据出现  让聊天面板出现
                whiletrue){
                   ….
                String read = reader.readLine);
                ifread.contains”zhimakaimen”)){
                this.setVisibletrue);
                continue;
                  ….

                }
    私聊:
    在服务器上 有一个用户map列表 每一个用户发消息时候 都在消息里面加上发送的对象
     服务器根据名字取到对应的用户 转发信息


    给每一个对话 建立一个对话框:
    在客户端 建立一个map  里面装着 所有的与每一个人聊天的对话框  
    用户收发信息的时候  如果map里面没有与此人聊天的对话框 就新建一个 并放进ma

    能给一个客户端生成多个对话框了:
   
给把客户端代码分开 重新组合
    以通信代码为主 在需要的时候弹出对话框

import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;
import java.util.*;

public class Cl implements Runnable {
    Client5 frame = null;

    String title = “”;

    private BufferedReader reader;

    private PrintWriter writer;

    private Socket socket;

    private HashMap map = new HashMap);

    private void checkMapString read) {
        
        read = read.substringread.indexOf”> :”)+3);
        System.err.printlnread.trim));
        if !map.containsKeyread.trim)))) {
            frame = new Client5″”);
             frame.setVisibletrue);
            map.putread.trim),frame);
        }
    }
    public PrintWriter getWriter) {
        return writer;
    }

    public void setWriterPrintWriter writer) {
        this.writer = writer;
    }

    public void run) {
        while true) {
            try {
                String read = reader.readLine);

                checkMapread);
                
                frame.getMsgView).appendread + “”n”);
            } catch IOException ie) {
            }
        }
    }

    private void connect) {
        try {
            System.err.println”尝试与服务器连接.”n”);
            socket = new Socket”127.0.0.1″, 7777);
            System.err.println”聊天准备完毕.”n”);
            reader = new BufferedReadernew InputStreamReadersocket
                    .getInputStream)));
            writer = new PrintWritersocket.getOutputStream), true);
new Threadthis).start);
        } catch Exception e) {
            System.err.println”连接失败..”);
        }
    }
    
    
    
    public static void mainString[] args) {
        Cl client = new Cl);
        client.connect);
    }
    
    class Client5 extends Frame {
        
        private TextField nameBox = new TextField”<WeiJian>”);

        private TextArea msgView = new TextArea);

        private TextField sendBox = new TextField);

        public Client5) {}

        public Client5String title) {
            supertitle);
            msgView.setEditablefalse);
            addnameBox, “North”);
            addmsgView, “Center”);
            addsendBox, “South”);
            sendBox.addActionListenernew ActionListener) {
                public void actionPerformedActionEvent ae) {
                    try {
                        writer.println
                                nameBox.getText) + ” : ” + sendBox.getText));
                        sendBox.setText””);
                    } catch Exception ie) {
                    }
                }
            });
            pack);
        }

        public TextArea getMsgView) {
            return msgView;
        }

        public void setMsgViewTextArea msgView) {
            this.msgView = msgView;
        }

    }

}


   


import java.net.*;
import java.io.*;
import java.util.*;
public class Server5{
  private ServerSocket server;
  private BManager bMan=new BManager);
  public Server5){}
  void startServer){
    try{
      server=new ServerSocket7777);
      System.out.println”服务器创建完毕”);
      whiletrue){
        Socket socket=server.accept);
        new Chat_Threadsocket).start);
        bMan.addsocket);
        bMan.sendClientInfo);
      }
    }catchException e){
      System.out.printlne);
    }
  }
  public static void mainString[] args){
    Server5 server=new Server5);
    server.startServer);
  }
  class Chat_Thread extends Thread{
    Socket socket;
    private BufferedReader reader;
    private PrintWriter writer;
    Chat_ThreadSocket socket){
      this.socket=socket;
    }
    public void run){
      try{
        reader=new BufferedReadernew InputStreamReadersocket.getInputStream)));
        writer=new PrintWritersocket.getOutputStream), true);
        String msg;
        whilemsg=reader.readLine))!=null){
          System.out.printlnmsg);
          bMan.sendToAllmsg);
        }
      }catchException e){
      }finally{
        try{
          bMan.removesocket);
          ifreader!=null) reader.close);
          ifwriter!=null) writer.close);
          ifsocket!=null) socket.close);
          reader=null; writer=null; socket=null;
          System.out.println”客户机离开.”);
          bMan.sendClientInfo);
        }catchException e){}
      }
    }
  }
  class BManager extends Vector{
    BManager){}
    void addSocket sock){
      super.addsock);
    }
    void removeSocket sock){
      super.removesock);
    }
    synchronized void sendToAllString msg){
      PrintWriter writer=null;
      Socket sock;
      forint i=0; i<size); i++){
        sock=Socket)elementAti);
        try{
          writer=new PrintWritersock.getOutputStream), true);
        }catchIOException ie){}
        ifwriter!=null)writer.printlnmsg);
      }  
    }
    synchronized void sendClientInfo){
      String info=”当前聊天人数: “+size);
      System.out.printlninfo);
      sendToAllinfo);
    }  
  }
}
/////////////////////////////////////////////////////////////////////////////////////
 
import java.awt.*;
import java.net.*;
import java.io.*;
import java.awt.event.*;
 
public class Client5 extends Frame implements Runnable {
    private TextField nameBox = new TextField”<shenxian>”);
 
    private TextArea msgView = new TextArea);
 
    private TextField sendBox = new TextField);
 
    private BufferedReader reader;
 
    private PrintWriter writer;
 
    private Socket socket;
 
    public Client5String title) {
        supertitle);
        msgView.setEditablefalse);
        addnameBox, “North”);
        addmsgView, “Center”);
        addsendBox, “South”);
        sendBox.addActionListenernew ActionListener) {
            public void actionPerformedActionEvent ae) {
                try {
                    writer.printlnnameBox.getText) + ” : ”
                            + sendBox.getText));
                    sendBox.setText””);
                } catch Exception ie) {
                }
            }
        });
        pack);
    }
 
    public void run) {
        while true) {
            try {
                msgView.appendreader.readLine) + “”n”);
            } catch IOException ie) {
            }
        }
    }
 
    private void connect) {
        try {
            msgView.append”尝试与服务器连接.”n”);
            socket = new Socket”127.0.0.1″, 7777);
            msgView.append”聊天准备完毕.”n”);
            reader = new BufferedReadernew InputStreamReadersocket
                    .getInputStream)));
            writer = new PrintWritersocket.getOutputStream), true);
            new Threadthis).start);
        } catch Exception e) {
            msgView.append”连接失败..”);
        }
    }
 
    public static void mainString[] args) {
        Client5 client = new Client5″聊天”);
        client.setVisibletrue);
        client.connect);
    }
}

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注