青鸟小弟,在做[Ajax版本的Web在线聊天],现在就差不同的用户之间交互信息,请问如何实现,前提:打开两个页面,在本机上,高手赐教菜鸟,感激涕零!

问题描述

已经功能达到:一个用户登录用户yxc登录,就可以发送信息第二个用户登录,用户(yxc2)登录,就可以发送信息。再打开一个页面,还是这个登录的用户(yxc2)发送信息。在发送信息也是这个用户(yxc2)问题:能否开两个页面,在本机做到交互,两个用户,请问思路提示,还有代码,是否需要网络编程基础,这个没见过,高手指点一下小弟!

解决方案

解决方案二:
呵呵,我的做法是存在公共区域,比如:context。我当时使用scock做的。不过有个缺点。。。只能一个对一个说话~!
解决方案三:
不断的读取数据库
解决方案四:
packagechattingRoom;importjava.awt.BorderLayout;importjava.awt.FlowLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.Socket;importjava.net.UnknownHostException;importjava.util.ArrayList;importjava.util.List;importjavax.swing.BoxLayout;importjavax.swing.JButton;importjavax.swing.JComboBox;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;importjavax.swing.JTextField;publicclassChatRoomClient{privateJFrameframe;privateJTextAreaarea;privateJLabellabel;privateJComboBoxbox;privateJTextFieldfield;privateJButtonbutton;privateJPaneleastPanel;privateSockets;privatePrintWriterpw;privateBufferedReaderbr;privateList<String>onlineUserList;privateStringuserName;publicChatRoomClient(){createSocket();login();onlineUserList=newArrayList<String>();frame=newJFrame("网络聊天室客户端");area=newJTextArea(20,40);label=newJLabel(userName);box=newJComboBox();field=newJTextField(25);button=newJButton("发送");init();addEventHandler();}privatevoidcreateSocket(){try{s=newSocket("127.0.0.1",9090);pw=newPrintWriter(s.getOutputStream());br=newBufferedReader(newInputStreamReader(s.getInputStream()));}catch(UnknownHostExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}privatevoidlogin(){do{Stringstr=JOptionPane.showInputDialog(frame,"请输入昵称:");pw.println("%LOGIN%:"+str);pw.flush();Stringresponse=null;try{response=br.readLine();}catch(IOExceptione){e.printStackTrace();}if(response!=null&&response.split(":")[0].equals("%LOGIN%")&&response.split(":")[1].equals("OK")){userName=str;break;}else{JOptionPane.showMessageDialog(frame,"已经存在同名昵称,请重新输入!");}}while(true);}privatevoidinit(){frame.setLayout(newBorderLayout());JScrollPanejsp=newJScrollPane(area);frame.add(jsp,BorderLayout.CENTER);JPanelsouthPanel=newJPanel();southPanel.setLayout(newFlowLayout());southPanel.add(label);southPanel.add(newJLabel("对"));southPanel.add(box);southPanel.add(newJLabel("说:"));southPanel.add(field);southPanel.add(button);frame.add(southPanel,BorderLayout.SOUTH);eastPanel=newJPanel();eastPanel.setLayout(newBoxLayout(eastPanel,BoxLayout.Y_AXIS));eastPanel.add(newJLabel("在线用户列表:"));frame.add(eastPanel,BorderLayout.EAST);}privatevoidaddEventHandler(){ActionListenerlis=newActionListener(){publicvoidactionPerformed(ActionEvente){if(field.getText().trim().equals("")){JOptionPane.showMessageDialog(frame,"不能发送空消息!");return;}Stringstr="%MESSAGE%:"+userName+":"+box.getSelectedItem()+":"+field.getText();pw.println(str);pw.flush();field.setText("");}};button.addActionListener(lis);field.addActionListener(lis);frame.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){intop=JOptionPane.showConfirmDialog(frame,"确定要离开聊天室吗?","确认退出",JOptionPane.YES_NO_OPTION);if(op==JOptionPane.YES_OPTION){pw.println("%EXIT%:"+userName);pw.flush();try{Thread.sleep(300);s.close();}catch(InterruptedExceptione1){e1.printStackTrace();}catch(IOExceptione1){e1.printStackTrace();}System.exit(0);}}});}privatevoidreflushUserList(){box.removeAllItems();box.addItem("所有人");eastPanel.removeAll();eastPanel.add(newJLabel("在线用户列表:"));eastPanel.add(newJButton("所有人"));JButtonbut;for(Stringuser:onlineUserList){box.addItem(user);eastPanel.add(but=newJButton(user));but.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){Stringstr=e.getActionCommand();box.setSelectedItem(str);}});}}publicvoidshowMe(){frame.pack();frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);newReadMessageThread().start();}classReadMessageThreadextendsThread{publicvoidrun(){while(true){Stringcomm=null;try{comm=br.readLine();}catch(IOExceptione){e.printStackTrace();}if(comm==null){continue;}if(comm.split(":")[0].equals("%MESSAGE%")){Stringfrom=comm.split(":")[1];Stringto=comm.split(":")[2];Stringcontent=comm.split(":")[3];if(from.equals("SYSTEM")){area.append("[系统消息]:"+content+"n");}else{area.append(from+"对"+to+"说:"+content+"n");}}elseif(comm.split(":")[0].equals("%USERLIST%")){String[]userArray=comm.split(":")[1].split(";");onlineUserList.clear();for(Stringuser:userArray){onlineUserList.add(user);}reflushUserList();}}}}publicstaticvoidmain(String[]args){newChatRoomClient().showMe();}}

packagechattingRoom;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.ServerSocket;importjava.net.Socket;importjava.util.Collection;importjava.util.Date;importjava.util.Hashtable;importjava.util.Map;importjava.util.Set;publicclassChatRoomServer{privateServerSocketss;privateMap<String,Socket>onlineUsers;publicChatRoomServer(){try{ss=newServerSocket(9090);onlineUsers=newHashtable<String,Socket>();}catch(IOExceptione){e.printStackTrace();}}publicvoidstartService(){Sockets=null;try{while(true){s=ss.accept();newChatRoomServerThread(s).start();}}catch(IOExceptione){e.printStackTrace();}}classChatRoomServerThreadextendsThread{privateSockets;privateBufferedReaderbr;privatePrintWriterpw;publicChatRoomServerThread(Sockets){this.s=s;try{br=newBufferedReader(newInputStreamReader(s.getInputStream()));pw=newPrintWriter(s.getOutputStream());}catch(IOExceptione){e.printStackTrace();}}publicvoidrun(){while(true){Stringcomm=null;try{comm=br.readLine();}catch(IOExceptione1){e1.printStackTrace();}if(comm.split(":")[0].equals("%LOGIN%")){StringuserName=comm.split(":")[1];if(onlineUsers.containsKey(userName)){pw.println("%LOGIN%:REFUSE");pw.flush();}else{pw.println("%LOGIN%:OK");pw.flush();onlineUsers.put(userName,s);sendMessageToAllClient("%MESSAGE%:SYSTEM:所有人:"+userName+"进入聊天室!");sendOnlineUserList();}}elseif(comm.split(":")[0].equals("%MESSAGE%")){Stringto=comm.split(":")[2];if(to.equals("所有人")){sendMessageToAllClient(comm);}else{sendMessageToClient(comm,to);}}elseif(comm.split(":")[0].equals("%EXIT%")){Stringuser=comm.split(":")[1];onlineUsers.remove(user);sendMessageToAllClient("%MESSAGE%:SYSTEM:所有人:"+user+"离开聊天室!");sendOnlineUserList();try{s.close();}catch(IOExceptione){e.printStackTrace();}break;}}}//runend!privatevoidsendOnlineUserList(){Set<String>userSet=onlineUsers.keySet();Object[]userArray=userSet.toArray();StringBufferuserListString=newStringBuffer();for(inti=0;i<userArray.length;i++){userListString.append(userArray[i]);if(i<userArray.length-1){userListString.append(";");}}sendMessageToAllClient("%USERLIST%:"+userListString);}privatevoidsendMessageToClient(Stringmesg,StringclientUserName){Sockettemp_s=onlineUsers.get(clientUserName);PrintWriterpw=null;try{pw=newPrintWriter(temp_s.getOutputStream());pw.println(mesg+"t["+newDate()+"]");pw.flush();}catch(IOExceptione){e.printStackTrace();}}privatevoidsendMessageToAllClient(Stringmesg){Collection<Socket>coll=onlineUsers.values();Datedate=newDate();for(Sockettemp_s:coll){PrintWriterpw=null;try{pw=newPrintWriter(temp_s.getOutputStream());}catch(IOExceptione){e.printStackTrace();}if(mesg.split(":")[0].equals("%MESSAGE%")){pw.println(mesg+"t["+date+"]");pw.flush();}else{pw.println(mesg);pw.flush();}}}}/***@paramargs*/publicstaticvoidmain(String[]args){newChatRoomServer().startService();}}

解决方案五:
packagechattingRoom;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.net.Socket;importjava.net.UnknownHostException;publicclassTCPClientA{privateSockets;publicTCPClientA(){try{s=newSocket("127.0.0.1",8090);}catch(UnknownHostExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}publicvoidgo(){BufferedReaderbr=null;try{br=newBufferedReader(newInputStreamReader(s.getInputStream()));Stringstr=br.readLine();System.out.println("当前服务器系统时间:"+str);}catch(IOExceptione){e.printStackTrace();}}/***@paramargs*/publicstaticvoidmain(String[]args){newTCPClientA().go();}}

packagechattingRoom;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.Socket;importjava.net.UnknownHostException;importjava.util.Scanner;publicclassTCPClientB{privateSockets;publicTCPClientB(){try{s=newSocket("127.0.0.1",8091);}catch(UnknownHostExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}publicvoidgo(){Scannersca=newScanner(System.in);System.out.println("pleaseinputyourwords:");Stringstr=sca.nextLine();PrintWriterpw=null;BufferedReaderbr=null;try{pw=newPrintWriter(s.getOutputStream());pw.println(str);pw.flush();br=newBufferedReader(newInputStreamReader(s.getInputStream()));str=br.readLine();System.out.println(str);}catch(IOExceptione){e.printStackTrace();}}/***@paramargs*/publicstaticvoidmain(String[]args){newTCPClientB().go();}}

解决方案六:
packagechattingRoom;importjava.io.IOException;importjava.io.PrintWriter;importjava.net.ServerSocket;importjava.net.Socket;importjava.util.Date;publicclassTCPServerA{privateServerSocketss;publicTCPServerA(){try{ss=newServerSocket(8090);}catch(IOExceptione){e.printStackTrace();}}publicvoidstartService(){Sockets=null;PrintWriterpw=null;try{s=ss.accept();pw=newPrintWriter(s.getOutputStream());pw.println(newDate());pw.flush();}catch(IOExceptione){e.printStackTrace();}finally{if(s!=null)try{s.close();}catch(IOExceptione){}}}/***@paramargs*/publicstaticvoidmain(String[]args){newTCPServerA().startService();}}

packagechattingRoom;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.ServerSocket;importjava.net.Socket;publicclassTCPServerB{privateServerSocketss;publicTCPServerB(){try{ss=newServerSocket(8091);}catch(IOExceptione){e.printStackTrace();}}publicvoidstartService(){Sockets=null;try{while(true){s=ss.accept();newServerThread(s).start();}}catch(IOExceptione){e.printStackTrace();}}classServerThreadextendsThread{privateSockets;publicServerThread(Sockets){this.s=s;}publicvoidrun(){BufferedReaderbr=null;PrintWriterpw=null;try{br=newBufferedReader(newInputStreamReader(s.getInputStream()));Stringstr=br.readLine();System.out.println(s.getInetAddress()+":"+str+":"+s.getRemoteSocketAddress());str=str.toUpperCase();try{Thread.sleep(20000);}catch(InterruptedExceptione){e.printStackTrace();}pw=newPrintWriter(s.getOutputStream());pw.println(str);pw.flush();}catch(IOExceptione){e.printStackTrace();}}}/***@paramargs*/publicstaticvoidmain(String[]args){newTCPServerB().startService();}}

解决方案七:
该回复于2011-04-26 08:45:46被版主删除
解决方案八:
http://download.csdn.net/source/3003015

时间: 2024-10-28 01:01:03

青鸟小弟,在做[Ajax版本的Web在线聊天],现在就差不同的用户之间交互信息,请问如何实现,前提:打开两个页面,在本机上,高手赐教菜鸟,感激涕零!的相关文章

WebOnLineSendMsg(Web在线聊天),如何在本机上实现 不同的登录用户(user)交互

问题描述 麻烦给一下青鸟的小菜鸟一下思路?求高手指点,做到这蒙了,我们学校有局域网,回去想实验,到底是啥理论?代码详解? 解决方案 解决方案二:如果允许一台机器多个用户登录,那么依靠Session来识别用户就是不可取的.可以为用户发出的每个请求都附一个隐藏域,用以区分用户.简单一点做的话,就是客户端周期性轮询服务器,取当前最新状态信息.解决方案三:在下做Web版本的在线聊天,刚想到的思路能否达到不同用户之间的交互你好,我是发帖人,yxc,这样,我刚才想了一下,我将登录的用户存放在一个List中,

关于java web 在线聊天咨询

问题描述 客户需求:和QQ的在线客服类似有图标一点击就可以和QQ进行在线聊天需要什么技术支持 解决方案 解决方案二:你说的是在线聊天么?并不是直接去访问QQ吧,如果是那样,我觉得可能用的是ajax技术吧,后台用什么倒是无所谓了,只是可能要定时去后台取数据

用三五天时间边学边用rails做了一个简单的在线聊天室。

问题描述 刚开始需要一个熟悉的过程,不过之后确实能体会到rails令人清爽的一面.地址是http://219.234.86.88:3001/源代码在googlecode.

跪求高手赐教,两个数据库两个表怎样象SQL中做Left join关联然后在datagrid中输出!!!!

问题描述 目前有两个数据库,一个ORACLE一个sqlserver,想比较两个数据库中两张表的差异,并把结果输出到datagrid,能不能实现象在SQL中LEFTJOIN那样的效果进行关联?(DTS做起来效率太低)DATASETDATATABLE可以实现这样的效果吗?查阅了很多资料和MSDN,都没找到答案,求高手赐教!!!最好是有思路和代码,谢谢!!! 解决方案 解决方案二:关注-解决方案三:明确的告诉你不行!解决方案四:呜呜....连变通的方法也没有吗?解决方案五:比较两个数据库中两张表的差异

基于javascript、ajax、memcache和PHP实现的简易在线聊天室_javascript技巧

在线聊天室(online chatrooms)是一个共多人进行沟通交流的网络平台,随着越来越多的新技术的发明和成熟运用,在线聊天室也出现使用各种不同技术的, 这篇文章我想简单总结一下. 首先说一下前台技术,最新的当然是基于HTML5的websocket,它实现了浏览器与服务器全双工通信(full-duplex).WebSocket通信协议于2011年被IETF定为标准 RFC 6455,WebSocketAPI被W3C定为标准.在WebSocket API中,浏览器和服务器只需要做一个握手的动作

青鸟小弟,请问用AJAX技术做的聊天室,一个页面发送 信息(Message),而另一个页面无法达到及时更新数据,当另一个页面发送数据的时候,才能更新数据!急求?

问题描述 青鸟小弟,请问用AJAX技术做的聊天室,一个页面发送信息(Message),而另一个页面无法达到及时更新数据,当另一个页面发送数据的时候,才能更新数据!急求解决问题的方案用到的技术JSP,Struts2,Hibernate,Spring,用到的内置对象:application:这个关键--是存放发送的信息的,Session:这个主要是区别不同登录用户???请问如何达到要求,一个页面发送信息,另一个页面也更新数据,大前提:不要刷新页面,我用的就是AJAX技术,我急求高手指点一下菜鸟小弟,

用ASP.NET 2.0实现AJAX风格的Web开发

ajax|asp.net|web 提要 在过去的几个月中,基于AJAX技术开发高度交互的Web应用程序的设计模式迅速流行开来.现在,具有高度可配置性的Web应用程序,例如Google Maps和A9,都在综合利用这些技术来创造丰富的客户端用户体验.其实,结合AJAX技术进行Web开发并非最近的研究成果,只不过这些技术一直以来不断得到持续更新和改进. 本文中我有三个目的.首先,我想提供一个AJAX风格应用程序的高级概述.其次,我想详细地描述ASP.NET 2.0的异步回调机制.最后,我想对构建AJ

Ajax兴起, 传统Web框架与狼共舞

关于J2EE的开发框架可谓是百花齐放,从JSF.Tapestry到Struts.WebWork,又有从Spring WebFlow到JSP/JSTL/Velocity等等.而且几乎每天都有新框架诞生.然而,面对Ajax或是其它类似Ajax客户端技术的兴起,是不是会意味着传统基于HTML/HTTP的Web框架将会前途渺茫? 一. 传统Web遭遇AJAX,是融合还是消亡 传统的Web框架主要负责处理HTTP请求及生成HTML页面,在服务器保证客户端的正常显示,主要通过处理表单,绑定业务数据对象等并返

Microsoft AJAX版本历史、功能和参考资源

Microsoft AJAX版本历史 VS2005 Atlas: 最初的版本代号 Asp.net 2.0 AJAX Extensions: 发布版本,在VS2005SP1中包含 ASP.NET AJAX Library – 客户端js脚本库 ASP.NET AJAX Extensions – 服务端控件,不用写JavaScript实现javascript的功能 AJAX Control Toolkit –扩展服务端控件性行为的控件[codeplex开源项目],如AutoCompleteExten