JAVA代码编写一简单网络聊天程序
- 格式:docx
- 大小:16.35 KB
- 文档页数:7
package com.wyh.chatRoom;import java.awt.BorderLayout;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import .InetAddress;import .ServerSocket;import .Socket;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTabbedPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.JToolBar;public class wyhChatRoom extends JFrame implements ActionListener{ private String name; //服务器聊天室的图形用户界面private JComboBox combox; //网名private JTextField text; //输入IP地址或域名的组合框private JTabbedPane tab; //选项卡窗格,每页与一个Socket通信public wyhChatRoom(int port ,String name) throws IOException{super("聊天室"+name+" "+InetAddress.getLocalHost()+"端口:"+port);this.setBounds(320, 240, 440, 240);this.setDefaultCloseOperation(EXIT_ON_CLOSE);JToolBar toolbar=new JToolBar(); //工具栏this.getContentPane().add(toolbar,"North");toolbar.add(new JLabel("主机"));combox=new JComboBox();combox.addItem("127.0.0.1");toolbar.add(combox);combox.setEditable(true);toolbar.add(new JLabel("端口"));text=new JTextField("1251");toolbar.add(text);JButton button_connect=new JButton("连接");button_connect.addActionListener(this);toolbar.add(button_connect);tab=new JTabbedPane(); //选项卡窗口this.setBackground(Color.blue);this.getContentPane().add(tab);this.setVisible(true);=name;while(true){Socket client=new ServerSocket(port).accept();//等待接受客户端的连接申请tab.addTab(name, new TabPageJPanel(client));//tab添加页,页中添加内部类面板tab.setSelectedIndex(tab.getTabCount()-1);//tab指定新页为选择状态port++;}}public void actionPerformed(ActionEvent e){if(e.getActionCommand()=="连接"){String host=(String)combox.getSelectedItem();int port=Integer.parseInt(text.getText());try{tab.addTab(name, new TabPageJPanel(new Socket(host,port)));//连接成功tab添加页tab.setSelectedIndex(tab.getTabCount()-1);//tab指定新页为选中状态}catch(IOException e1){e1.printStackTrace();}}}//面板内部类,每个对象表示选项卡窗格的一页,包含一个Socket和一个线程private class TabPageJPanel extends JPanel implements Runnable,ActionListener{Socket socket;Thread thread;JTextArea text_receiver;//显示对话内容的文本区JTextField text_sender; //输入发送内容的文本行JButton buttons[]; //发送‘离线’删除页按钮PrintWriter cout; //字符输出流对象int index;TabPageJPanel(Socket socket) {super(new BorderLayout());this.text_receiver=new JTextArea();this.text_receiver.setEditable(false);this.add(new JScrollPane(this.text_receiver));JPanel panel=new JPanel();this.add(panel,"South");this.text_sender=new JTextField(16);panel.add(this.text_sender);this.text_sender.addActionListener(this);String strs[]={"发送","离线","删除页"};buttons =new JButton[strs.length];for (int i = 0; i < buttons.length; i++) {buttons[i]=new JButton(strs[i]);panel.add(buttons[i]);buttons[i].addActionListener(this);}buttons[2].setEnabled(false);this.socket=socket;this.thread=new Thread(this);this.thread.start();}@Overridepublic void run() {try {this.cout =new PrintWriter(socket.getOutputStream(),true);this.cout.println(name);//发送自己网名给对方BufferedReader cin=new BufferedReader(new InputStreamReader(socket.getInputStream()));String name=cin.readLine(); //接收对方网名index=tab.getSelectedIndex();tab.setTitleAt(index, name);String aline=cin.readLine();while(aline!=null && !aline.equals("bye")){tab.setSelectedIndex(index);text_receiver.append(aline+"\r\n");Thread.sleep(1000);aline=cin.readLine();}cin.close();cout.close();socket.close();buttons[0].setEnabled(false);//接收方的发送按钮无效buttons[1].setEnabled(false);//接收方的离线按钮无效buttons[2].setEnabled(false);//接收方的删除按钮无效} catch (Exception e) {e.printStackTrace();}}@Overridepublic void actionPerformed(ActionEvent e) {if(e.getActionCommand()=="发送"){this.cout.println(name+"说:"+text_sender.getText());text_receiver.append("我说:"+text_sender.getText()+"\n");text_sender.setText("");}if(e.getActionCommand()=="离线"){text_receiver.append("我离线\n");this.cout.println(name+"离线\n"+"bye");buttons[0].setEnabled(false);buttons[1].setEnabled(false);buttons[2].setEnabled(false);}}}public static void main(String[] args) throws IOException {new wyhChatRoom(2001, "航哥哥");//启动服务端,约定端口,指定网名}}。
客户端代码:package chat1;import java.awt.*;import java.awt.event.*;import java.awt.image.BufferedImage;import javax.swing.*;import java.io.*;import .*;public class Chat_client extends JFrame implements ActionListener {private static final long serialVersionUID = 1L;private ObjectInputStream in;private ObjectOutputStream out;private String message = "";// private String Localhost;private Socket toclient;//private String ss[]={"宋体","楷体","华文行楷","新宋体"};JMenuBar jmb1;JToolBar jtb1;JToolBar jtb2;JButton jm1;JButton jm2;JButton jm3;JButton jm4;JButton connect;JButton selfout;JButton selcolor;JButton back1;JButton back2;JButton selface;JButton selbg;JButton selsound;JPanel jp1;JPanel jp2;JList jl;JTextArea jta1;JTextField jtf;Container con;JLabel label;JSeparator js1;JSeparator js2;Color color;BufferedImage bufimage;Icon bg1;Icon bg2;Icon bg3;Icon bg4;Dimension size;Font font;// JComboBox jcb;public Chat_client(){con = this.getContentPane();jp1 = new JPanel();jp2 = new JPanel();jp1.setLayout(new BorderLayout());jp2.setLayout(new BorderLayout());jta1=new JTextArea("");jtf = new JTextField("Please input:");jta1.setBackground(Color.LIGHT_GRAY);jtf.setBackground(Color.LIGHT_GRAY);jta1.setEditable(false);jta1.setEnabled(true);jtf.setEditable(true);jtf.addActionListener(this);jmb1 = new JMenuBar();jmb1.setBackground(Color.pink);jtb1 = new JToolBar();jtb1.setBackground(Color.pink);js1 = new JSeparator();js2 = new JSeparator();jl = new JList();label = new JLabel("制作人:Jimmy"); label.setForeground(Color.BLUE);jtb2 = new JToolBar();jtb2.setBackground(Color.pink);jtb2.add(label);jp2.add( new JScrollPane(jtf));jp2.add(jtb1,"North");jp2.add(jtb2,"South");jm1 = new JButton("在线");jm1.setBackground(Color.orange); jmb1.add(jm1);jm2 = new JButton("离线");jm2.setBackground(Color.orange); jmb1.add(jm2);jm3 = new JButton("隐身");jm3.setBackground(Color.orange); jmb1.add(jm3);jm4 = new JButton("帮助");jm4.setBackground(Color.orange);jm4.addActionListener(this);jmb1.add(jm4);// jcb = new JComboBox(ss);connect = new JButton("连接服务器"); connect.setBackground(Color.yellow); connect.addActionListener(this); selface = new JButton("表情选择"); selface.setBackground(Color.orange); selface.addActionListener(this);selbg = new JButton("情景选择"); selbg.setBackground(Color.orange); selbg.addActionListener(this);selfout = new JButton("字体选择");selfout.addActionListener(this);selcolor = new JButton("字体颜色");selcolor.setBackground(Color.orange); selcolor.addActionListener(this);selsound = new JButton("选择音乐"); selsound.addActionListener(this);selsound.setBackground(Color.orange);jtb1.add(selcolor);jtb1.add(jl);jtb1.add(selfout);// jtb1.add(jcb);jtb1.add(selface);jtb1.add(selbg);jtb1.add(selsound);jtb1.add(connect,"East");bg1 = new ImageIcon("micky.jpg");bg2 = new ImageIcon("23.jpg");back1 = new JButton();back2 = new JButton();back1.setIcon(bg1);back2.setIcon(bg2);back1.setBackground(Color.pink);back2.setBackground(Color.pink);jp1.add(back1,"North");jp1.add(js2);jp1.add(back2,"South");con.setLayout(new BorderLayout());con.add(jmb1,"North");//con.add(jta1);con.add(jp2,"South");con.add(jp1,"East");con.add(new JScrollPane(jta1));size = this.getToolkit().getScreenSize();this.setJMenuBar(jmb1);this.setIconImage(getToolkit().getImage("qq.jpg"));this.setSize(size.width - 300, size.height /2 +27);this.setResizable(false);this.setLocation(100,220);this.setTitle("Welcome to the chat room !");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}public void actionPerformed(ActionEvent evt){if(evt.getActionCommand().equals("字体颜色") ){color = JColorChooser.showDialog(null, "请选择颜色", null);}if(evt.getActionCommand().equals("字体选择")){JOptionPane.showMessageDialog(null,"Sorry, you can't set the font that time!");}if(evt.getActionCommand().equals("情景选择")){JOptionPane.showMessageDialog(null, "Sorry,you should use the tolerant background !");}if(evt.getActionCommand().equals("选择音乐")){JOptionPane.showMessageDialog(null, "Sorry,the function is down");}if(evt.getActionCommand().equals("表情选择")){JOptionPane.showMessageDialog(null, "Sorry ");}if(evt.getSource()==jm4){JOptionPane.showMessageDialog(null, "这是一个基于局域网的聊天软件," +"\n"+"所以请在同一局域网中运行。
JAVA实现即使通讯的代码图形界面////////////////////////////////////////////////////////////用Java 编写的聊天器,可以当服务器或者是客户端,一对一,自定义对方IP 及端口。
//虽然名为LANChat ,但不限于局域网。
对象甚至可以是某种“服务器”。
///////////////////////////////////////////////////////////import java.io.*;import .*;import java.awt.*;import javax.swing.*;import java.awt.event.*;//////////////////////////////////////////////////////////public class LANChatV12{public static void m ain(String args[]){LoginFrame lf =new LoginFrame("输入目标");lf.show();}}/////////////////////////////////////////////////////////class LoginFrame extends JFrame{JButton BOK;JLabel LdesAddr, Lport;JTextField TFdesAddr, TFport;String desAddr, port;LoginFrame(){}LoginFrame(String title){super(title);Fram e t =this;BOK =new JButton("确定");LdesAddr =new JLabel("目标IP");Lport =new JLabel("端口");TFdesAddr =new JTextField(desAddr,12);TFport =new JTextField(port,12);//TFpassword.setEchoChar('*');BOK.addActionListener(new BOKListener(t)); setBackground(Color.blue);setBounds(350,250,200,128);setLayout(new FlowLayout(FlowLayout.CENTER,5,7)); add(LdesAddr);add(TFdesAddr);add(Lport);add(TFport);add(BOK);setResizable(false);//setVisible(true);addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){ System.exit(0);}});}class BOKListener implements ActionListener{Fram e t;BOKListener(){}BOKListener(Frame t){this.t =t;}public void actionPerformed(ActionEvent e){ desAddr =TFdesAddr.getText();port =TFport.getText();t.setVisible(false);Messenger m =new Messenger(desAddr, port); m.start();}}}/////////////////////////////////////////////////////class Messenger extends Thread{String desAddr;String port;int iport;TextArea content, send;JButton Bsend;ChatFram e cf;String title;Socket client;ServerSocket ss;OutputStream Writer osw =null; InputStreamReader isr =null; BufferedReader br;String line;boolean flag;//端口号是否正确boolean cbc; //can be client ?int tryTurns =3; //客户方式尝试的次数Messenger(){}Messenger(String desAddr, String port){super("LANChatMessenger");content =new TextArea("",0,0,TextArea.SCROLLBARS_VERTICAL_ONLY); send =new TextArea("",0,0,TextArea.SCROLLBARS_VERT ICAL_ONLY); Bsend =new JButton("发送");Bsend.setEnabled(false);title ="与" + desAddr +" 聊天";flag =true;cbc =true;cf =new ChatFram e(title, content, send, Bsend);cf.show();this.desAddr =desAddr;this.port =port;try{iport =Integer.parseInt(port);}catch(NumberFormatException nfe){content.append("非法的端口,程序4 秒后关闭。
使⽤Java和WebSocket实现⽹页聊天室实例代码在没介绍正⽂之前,先给⼤家介绍下websocket的背景和原理:背景在浏览器中通过http仅能实现单向的通信,comet可以⼀定程度上模拟双向通信,但效率较低,并需要服务器有较好的⽀持; flash中的socket 和xmlsocket可以实现真正的双向通信,通过 flex ajax bridge,可以在javascript中使⽤这两项功能. 可以预见,如果websocket⼀旦在浏览器中得到实现,将会替代上⾯两项技术,得到⼴泛的使⽤.⾯对这种状况,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并达到实时通讯。
在JavaEE7中也实现了WebSocket协议。
原理WebSocket protocol 。
现很多⽹站为了实现即时通讯,所⽤的技术都是轮询(polling)。
轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客户端的浏览器。
这种传统的HTTP request 的模式带来很明显的缺点 – 浏览器需要不断的向服务器发出请求,然⽽HTTP request 的header是⾮常长的,⾥⾯包含的有⽤数据可能只是⼀个很⼩的值,这样会占⽤很多的带宽。
⽽⽐较新的技术去做轮询的效果是Comet – ⽤了AJAX。
但这种技术虽然可达到全双⼯通信,但依然需要发出请求。
在 WebSocket API,浏览器和服务器只需要做⼀个握⼿的动作,然后,浏览器和服务器之间就形成了⼀条快速通道。
两者之间就直接可以数据互相传送。
在此WebSocket 协议中,为我们实现即时服务带来了两⼤好处:1. Header互相沟通的Header是很⼩的-⼤概只有 2 Bytes2. Server Push服务器的推送,服务器不再被动的接收到浏览器的request之后才返回数据,⽽是在有新数据时就主动推送给浏览器。
《Java程序设计实训》开发Chat即时聊天系统一、开放实验项目Java项目开发—Chat即时聊天系统二、开放实验时间201X.XX.XX—201X.XX.XX三、开放实验地点专业微机室二(B-4009)四、开放实验目的综合利用JDK、Eclipse开发环境,实现中小型项目的设计。
本系统采用C/S架构,基于TCP协议实现数据在服务器和客户端之间进行传输,实现聊天信息的存储。
通过“Chat即时聊天系统”的设计过程,深刻了解掌握面向对象程序设计语言Java的核心概念和特性;了解编程技术知识,学会处理异常状况,深入了解Java数据库功能,熟练掌握图形界面的操作技术,掌握Java应用软件的开发环境和开发过程;灵活选择程序设计思想,在编写过程中进一步体会Java与其它编程语言的不同之处,分析出Java的优点和先进之处。
同时,使学生能够深入的了解软件项目开发的流程和步骤,掌握每一部分的设计和实现方法,以及充分利用现有的软件工程设计工具来完成项目的设计。
五、开放实验内容1.概要设计采用Socket类建立套接字实现客户端与服务端的通讯。
总体数据流图服务端数据流图2.设计原理(1).利用多线程实现多客户机制。
服务器总是在指定的端口上监听是否有客户请求,一旦监听到客户请求,服务器就会启动一个专门的服务线程来响应该客户的请求,而服务器本身在启动完线程之后马上又进入监听状态,等待下一个客户的到来。
(2).服务器在接受客户方的请求后,立即高度一个线程以处理服务器与客户方之间的交互,主程序则返回继续监听端口,等待下一个客户的连接请求。
前一个线程在完成相应的交互过程后自动退出,连接也将自动关闭。
(3).在服务器的程序中首先创建单个Server Socket,并调用accept()来等候一个新连接,一旦accept()返回,就取得获得结果的Socket,并用它新建一个线程,令其只为那个特定的客户提供服务。
然后再调用accept(),等候下一个新的连接请求。
GetMessage.java服务端:import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.io.InputStreamReader;public class GetMessage extends Thread{ private int i;String v;JLabel label=null;private JTextArea text;public GetMessage(int i,JTextArea text) {this.i=i;this.text=text;}public void run(){try {ServerSocket so = newServerSocket(i);Socket s = so.accept();while(true){InputStreamReader i = new InputStreamReader(s.getInputStream());BufferedReader b = new BufferedReader(i);v= b.readLine();text.append("对方说"+v+"\n");}} catch (IOException e) {//label.setText("对方已经下线");text.append();}}}SendMessage.java客户端:import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader; import java.io.PrintStream;import .Socket;public class SendMessage extends Thread {private String ip;private int i;Socket s = null;JLabel label=null;JTextField text;JTextArea text1;public SendMessage(String ip,inti,JTextArea text1) {// TODO Auto-generated constructor stubthis.ip=ip;this.i=i;this.text1=text1;}public void run(){while(true){try {s = new Socket(ip,i);text1.setText("连接成功"+"\n");break;} catch (Exception e) {try {Thread.sleep(1000);} catch(InterruptedException e1) {System.out.println("出错了。
如何使用Java创建简单的网络应用程序1. 网络应用程序简介网络应用程序是一种通过互联网或局域网进行通信和数据交换的软件应用。
它可以基于客户端-服务器模型,也可以是对等模型。
Java是一种广泛使用的编程语言,具有优秀的网络编程能力,可以用于开发各种类型的网络应用程序。
2. Java网络编程基础Java提供了一系列标准类库和API,用于简化网络应用程序的开发。
其中最核心的类是包中的Socket和ServerSocket类。
Socket类代表一个客户端,可以向服务器发送请求和接收响应。
ServerSocket类则用于创建服务器端监听特定端口,并接受客户端的连接请求。
3. 创建简单的客户端首先,我们需要创建一个基本的客户端来连接服务器。
以下是一个使用Socket类创建简单客户端的示例代码:```javaimport java.io.IOException;import java.io.OutputStream;import .Socket;public class SimpleClient {public static void main(String[] args) {String serverAddress = "localhost";int serverPort = 8888;try (Socket socket = new Socket(serverAddress, serverPort)) { OutputStream outputStream = socket.getOutputStream(); String message = "Hello, Server!";byte[] bytes = message.getBytes();outputStream.write(bytes);outputStream.flush();} catch (IOException e) {e.printStackTrace();}}}```在该示例中,我们使用Socket类创建一个与服务器的连接,并获取输出流。
Java语言下的在线社交平台设计与实现一、引言随着互联网的快速发展,社交平台已经成为人们日常生活中不可或缺的一部分。
在这个信息爆炸的时代,人们渴望与他人分享生活、交流想法、建立社交关系。
本文将探讨如何利用Java语言设计和实现一个在线社交平台,让用户能够方便地进行社交互动。
二、技术选型在设计在线社交平台时,选择合适的技术栈至关重要。
Java作为一种稳定、高效的编程语言,具有广泛的应用领域,适合用于构建大型系统。
在开发在线社交平台时,可以选择Spring框架作为后端开发框架,结合Spring MVC和Spring Boot来实现RESTful API的开发。
同时,使用MySQL等数据库存储用户信息、帖子内容等数据。
三、功能设计1. 用户管理用户是社交平台的核心,因此需要实现用户注册、登录、个人信息管理等功能。
用户可以填写个人资料、上传头像,并且可以搜索其他用户并添加好友。
2. 帖子发布与评论用户可以发布文字、图片或视频帖子,并对其他用户的帖子进行评论和点赞。
帖子可以按照时间线展示,用户可以通过关注好友或话题来获取感兴趣的内容。
3. 私信功能用户之间可以发送私信进行一对一聊天,也可以创建群聊进行多人聊天。
私信功能能够增强用户之间的互动体验。
4. 搜索与推荐实现搜索功能,让用户可以快速找到感兴趣的内容或用户。
同时,根据用户的兴趣爱好和行为习惯,推荐相关内容给用户,提升用户粘性。
5. 数据统计与分析通过数据统计和分析,了解用户行为习惯、热门话题等信息,为运营提供决策支持。
可以统计每日活跃用户数、帖子点赞数等指标。
四、架构设计1. 前端架构前端采用HTML、CSS和JavaScript等技术实现页面布局和交互效果。
可以使用Vue.js或React.js等前端框架来简化开发流程,并提升用户体验。
2. 后端架构后端采用Spring框架实现业务逻辑处理和数据持久化。
使用Spring Security来保护接口安全性,确保用户信息不被恶意攻击者获取。
要创建一个简单的Java聊天窗口,您可以使用Java的图形用户界面(GUI)工具包Swing。
以下是一个基本的聊天窗口示例:```javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;public class ChatWindow extends JFrame implements ActionListener {private JTextField inputField;private JTextArea chatArea;private String message = "";public ChatWindow() {super("简单聊天窗口");setSize(400, 300);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);inputField = new JTextField();chatArea = new JTextArea();JButton sendButton = new JButton("发送");sendButton.addActionListener(this);JScrollPane scrollPane = new JScrollPane(chatArea);chatArea.setAutoscrolls(true);getContentPane().add(inputField,BorderLayout.SOUTH);getContentPane().add(sendButton, BorderLayout.EAST); getContentPane().add(scrollPane,BorderLayout.CENTER);}public void actionPerformed(ActionEvent e) {if (e.getSource() == sendButton) {message += inputField.getText() + "\n";chatArea.append(inputField.getText() + "\n");inputField.setText(""); // 清空输入框}}public static void main(String[] args) {ChatWindow chatWindow = new ChatWindow();}}```这个程序创建了一个简单的聊天窗口,用户可以在输入框中输入消息,然后点击"发送"按钮将消息发送到聊天区域。
使用eclipse 做聊天程序Server=new ServerSocket(50000)s=server.accept()dataIn=new DataOutputStream( s.getInputStream()) dataOut=new DataInputStream( s.getOutputStream())dataIn.readUTF()dataOut.writeUTF() s=new Socket(“localhost”,5000)dataIn=new DataInputStream ( s.getInputStream()) dataOut=new DataInputStream( s.getOutputStream())dataIn.readUTF()dataOut.writeUTF()1、Create a Java project2、Create a class3、Wtite codeimport java.awt.*;import java.awt.event.*;import java.io.*;import .*;public class chat1{public static void main(String[] args){new chatframe("ChatroomSever");}}class chatframe extends Frame{ServerSocket server=null;Socket s=null;DataInputStream dataIn=null;DataOutputStream dataout=null;Panel p1,p2;Button bs,bl;TextArea t1;Label l;TextField t2;chatframe(String ss){ super(ss);p1=new Panel();p2=new Panel();t1=new TextArea();l=new Label("消息:");t2=new TextField("大师兄,我去捉妖精吧! ",36);bs=new Button(" 发送");bl=new Button(" 启动");bl.addActionListener(new ActionListener(){public void actionPerformed(java.awt.event.ActionEvent e){try{server=new ServerSocket(5000);s=server.accept();dataIn=new DataInputStream(s.getInputStream());dataout=new DataOutputStream(s.getOutputStream());}catch(Exception e1){}dp gg=new dp();Thread yy=new Thread(gg);yy.start();}});bs.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){try{dataout.writeUTF("八戒说: "+t2.getText());t1.append("八戒说: "+t2.getText()+"\n");}catch(IOException e1){}}});addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent ee){System.exit(0);}});setLayout(new FlowLayout());p1.add(t1);add(p1);p2.setLayout(new FlowLayout());p2.add(bl);p2.add(l);p2.add(t2);p2.add(bs);add(p2);setBounds(100,100,460,260);setVisible(true);}class dp implements Runnable{public void run(){while(true){try{t1.append(dataIn.readUTF()+"\n");}catch(IOException gg){}}}}}4、Run the project5、Client end :import java.awt.*; import java.awt.event.*; import java.io.*; import .*;public class chat2{public static void main(String[] args){new chatframe("ChatroomClient");}}class chatframe extends Frame{ServerSocket server=null;Socket s=null;DataInputStream dataIn=null;DataOutputStream dataout=null;Panel p1,p2;Button bs,bl,bx;TextArea t1;Label l;TextField t2;chatframe(String ss){super(ss);p1=new Panel();p2=new Panel();t1=new TextArea();l=new Label("消息:");t2=new TextField("那你就去吧,别让妖精迷住! ",36);bs=new Button(" 发送");bl=new Button(" 连接");bl.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){try{s=new Socket("localhost",5000);dataIn=new DataInputStream(s.getInputStream());dataout=new DataOutputStream(s.getOutputStream());}catch(IOException gg){}dp gg=new dp();Thread yy=new Thread(gg);yy.start();}});bs.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){try{dataout.writeUTF("悟空说: "+t2.getText());t1.append("悟空说: "+t2.getText()+"\n");}catch(IOException e1){}}});addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent ee){System.exit(0);}});setLayout(new FlowLayout());p1.setLayout(new BorderLayout());p1.add(t1);add(p1);p2.setLayout(new FlowLayout());p2.add(bl);p2.add(l);p2.add(t2);p2.add(bs);add(p2);setBounds(100,100,460,260);setVisible(true);}class dp implements Runnable{public void run(){while(true){try{t1.append(dataIn.readUTF()+"\n");}catch(IOException gg){}}}}}2008-5-28 5:37于惜福镇王家村宿舍。
模拟微信聊天【案例介绍】1.案例描述在如今,微信聊天已经人们生活中必不可少的重要组成部分,人们的交流很多都是通过微信来进行的。
本案例要求:将多线程与UDP通信相关知识结合,模拟实现微信聊天小程序。
通过监听指定的端口号、目标IP地址和目标端口号,实现消息的发送和接收功能,并显示聊天的内容。
2.运行结果运行结果【案例目标】●学会分析“模拟微信聊天”任务的实现思路。
●根据思路独立完成“模拟微信聊天”任务的源代码编写、编译及运行。
●掌握网络通信中UDP协议的编程原理。
●掌握UDP网络通信DatagramPacket和DatagramSocket的使用。
【案例分析】(1)第一要知道用什么技术实现,通过上述任务描述可知此任务是使用多线程与UDP通信相关知识实现的。
要实现图中的聊天窗口界面。
首先需要定义一个实现微信聊天功能的类,类中需要定义访问微信聊天的输出语句,从而获取输入的发送端端口号、接收端端口号以及实现发送和接收功能的方法。
(2)实现发送数据的功能。
该功能通过一个实现了Runnable接口的类实现,类中需要定义获取发送数据的端口号,并在实现run()的方法中,编写发送数据的方法。
(3)实现接收数据的功能。
该功能通过一个实现了Runnable接口的类实现,类中需要定义获取接收数据的端口号,并在实现run()的方法中,编写显示接收到的数据的方法。
(4)创建完所有的类与方法后,运行两次程序,同时开启两个窗口来实现聊天功能。
【案例实现】(1)创建微信聊天程序,开启两个聊天窗口,需要创建两个聊天程序。
两个聊天程序代码分别如下所示。
Room.java1 package chapter0901;2 import java.util.Scanner;3 public class Room {4 public static void main(String[] args) {5 System.out.println("微信聊天欢迎您!");6 Scanner sc = new Scanner(System.in);7 System.out.print("请输入您的微信号登录:");8 int sendPort = sc.nextInt();9 System.out.print("请输入您要发送消息的微信号:");10 int receivePort = sc.nextInt();11 System.out.println("微信聊天系统启动!!");12 //发送操作13 new Thread(new SendTask(sendPort), "发送端任务").start();14 //接收操作15 new Thread(new ReceiveTask(receivePort), "接收端任务").start();16 }17 }上述代码中,第12行代码用多线程实现发送端口号以及实现发送端功能的方法。
利用JAVA实现简单聊天室1.设计思路Java是一种简单的,面向对象的,分布式的,解释的,键壮的,安全的,结构中立的,可移植的,性能很优异的,多线程的,动态的语言。
而且,Java 很小,整个解释器只需215K的RAM。
因此运用JAVA程序编写聊天室,实现简单聊天功能。
程序实现了聊天室的基本功能,其中有:(1)启动服务器:实现网络的连接,为注册进入聊天室做准备。
(2)注册登陆界面:填写基本信息如姓名等,可以供多人进入实现多人聊天功能。
(3)发送信息:为用户发送信息提供平台。
(4)离开界面:使用户退出聊天室。
(5)关闭服务器:断开与网络的连接,彻底退出聊天室。
2.设计方法在设计简单聊天室时,需要编写5个Java源文件:Server.java、Objecting.java、LogIn.java、ClientUser.java、Client.java。
3 程序功能图及程序相关说明(1)主功能框图(2) 聊天室基本功能表4.程序代码是说明程序中引入的包:package Chat; import .*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;import java.io.*;(1)服务器端代码中用户自定义类:类名:Server作用:服务器启动继承的接口名:ActionListenerpublic class Server implements ActionListener{定义的对象:count //记录点机关闭按钮次数2次关闭soconly //只有SOCKET,用于群发sockets//所有客户的SOCKETsocket_thread //Socket所在的线乘,用于退出;frame // 定义主窗体panel //定义面板start,stop //启动和停止按钮主要成员方法:public void center //定义小程序查看器的位置public void actionPerformed //定义处理异常机制定义子类:serverRun,Details继承的父类名:Threadclass serverRun extends Thread //启线乘用于接收连入的Socket class Details extends Thread //具体处理消息的线乘,只管发送消息创建一个ServerSocket 对象,用于接受指定端口客户端的信息ServerSocket server = new ServerSocket("1234");接受请求时候,通过accept()方法,得到一个socket对象。