`
- 浏览:
75539 次
- 性别:
- 来自:
厦门
-
上个周五的下午,在公司闲来无事,
写了个小程序玩玩,
稍微测试了一下,居然能用!
但由于代码量较少,也谈不上什么设计,
发上来算是个备忘吧:
服务器端程序:
客户端程序:
- packagecom.test.talk;
- importjava.awt.BorderLayout;
- importjava.awt.FlowLayout;
-
importjava.awt.event.ActionEvent;
-
importjava.awt.event.ActionListener;
-
importjava.awt.event.WindowAdapter;
-
importjava.awt.event.WindowEvent;
- importjava.io.DataInputStream;
- importjava.io.DataOutputStream;
- importjava.io.IOException;
- importjava.net.Socket;
- importjava.net.UnknownHostException;
- importjavax.swing.JButton;
- importjavax.swing.JFrame;
- importjavax.swing.JLabel;
- importjavax.swing.JPanel;
- importjavax.swing.JTextArea;
- importjavax.swing.JTextField;
-
-
-
publicclassClient
- {
-
publicstaticvoidmain(String[]args)
- {
-
ClientFrameframe=newClientFrame();
- }
- }
-
classClientFrameextendsJFrame
- {
-
privateJPanelmainPanel;
-
privateJPanelheadPanel;
-
privateJPanelfootPanel;
-
privateJTextAreashowArea;
-
privateJTextFieldinputTxt;
-
privateJLabelportLbl;
-
privateJLabelipLbl;
-
privateJLabelnameLbl;
-
privateJTextFieldportTxt;
-
privateJTextFieldipTxt;
-
privateJTextFieldnameTxt;
-
privateJButtonsubmitBtn;
-
privateJButtonnameBtn;
-
privateJButtonloginBtn;
-
privateSocketclientSocket=null;
-
privateDataOutputStreamdos=null;
-
privateDataInputStreamdis=null;
-
privatebooleanbConnect=false;
-
privateStringname="";
-
publicClientFrame()
- {
- init();
- }
-
privatevoidinit()
- {
-
-
mainPanel=newJPanel();
-
showArea=newJTextArea(15,80);
-
showArea.setEditable(false);
- mainPanel.add(showArea);
- getContentPane().add(mainPanel,BorderLayout.CENTER);
-
-
-
headPanel=newJPanel(newFlowLayout(FlowLayout.LEFT));
-
portLbl=newJLabel("PORT");
-
portTxt=newJTextField(7);
-
ipLbl=newJLabel("IP");
-
ipTxt=newJTextField(25);
-
nameLbl=newJLabel("name");
-
nameTxt=newJTextField(15);
-
nameBtn=newJButton("OK");
-
loginBtn=newJButton("login");
-
nameBtn.addActionListener(newActionListener()
- {
-
publicvoidactionPerformed(ActionEvente)
- {
- Stringtmp=nameTxt.getText();
-
if(tmp!=null||!tmp.equals(""))
- {
-
intid=javax.swing.JOptionPane.showConfirmDialog(null,"yesorno","chooseyes",
- javax.swing.JOptionPane.OK_OPTION);
-
if(id==0)
- {
- name=nameTxt.getText();
-
loginBtn.setEnabled(true);
-
nameBtn.setEnabled(false);
- }
- }
- }
- });
- headPanel.add(portLbl);
- headPanel.add(portTxt);
- headPanel.add(ipLbl);
- headPanel.add(ipTxt);
- headPanel.add(loginBtn);
- headPanel.add(nameLbl);
- headPanel.add(nameTxt);
- headPanel.add(nameBtn);
-
loginBtn.setEnabled(false);
-
loginBtn.addActionListener(newButtonClickAction());
- getContentPane().add(headPanel,BorderLayout.NORTH);
-
-
-
footPanel=newJPanel(newFlowLayout(FlowLayout.LEFT));
-
inputTxt=newJTextField(70);
-
submitBtn=newJButton("submit");
- footPanel.add(inputTxt);
- footPanel.add(submitBtn);
-
submitBtn.addActionListener(newButtonClickAction());
-
submitBtn.setEnabled(false);
- getContentPane().add(footPanel,BorderLayout.SOUTH);
-
-
addWindowListener(newWindowAdapter()
- {
-
publicvoidwindowClosing(WindowEvente)
- {
- disConnect();
- System.exit(0);
- }
- });
-
this.setSize(300,300);
- setLocation(100,100);
- pack();
-
setVisible(true);
- }
-
-
-
classButtonClickActionimplementsActionListener
- {
-
publicvoidactionPerformed(ActionEvente)
- {
-
if("submit".equals(e.getActionCommand()))
- {
- Stringstr=inputTxt.getText().trim();
-
inputTxt.setText("");
- sendToServer(str);
- }
-
elseif("login".equals(e.getActionCommand()))
- {
- connect();
- }
- }
- }
-
-
-
classEnterClickActionimplementsActionListener
- {
-
publicvoidactionPerformed(ActionEvente)
- {
- Stringstr=inputTxt.getText().trim();
-
inputTxt.setText("");
- sendToServer(str);
- }
- }
-
-
-
privatevoidsendToServer(Stringstr)
- {
-
try
- {
-
dos.writeUTF(name+":"+str);
- dos.flush();
- }
-
catch(IOExceptione)
- {
- e.printStackTrace();
- }
- }
-
-
-
privatevoiddisConnect()
- {
-
try
- {
-
-
-
-
bConnect=false;
- }
-
catch(Exceptione)
- {
- e.printStackTrace();
- }
- }
-
-
-
privateclassReceiveimplementsRunnable
- {
-
publicvoidrun()
- {
-
try
- {
-
while(bConnect)
- {
- Stringstr=dis.readUTF();
-
showArea.setText(showArea.getText()+str+'/n');
- }
- }
-
catch(IOExceptione)
- {
-
javax.swing.JOptionPane.showMessageDialog(null,"connectservererror");
- }
- }
- }
-
-
-
privatevoidconnect()
- {
-
try
- {
-
if(ipTxt.getText().matches("//d{1,3}.//d{1,3}.//d{1,3}.//d{1,3}")&&portTxt.getText().matches("//d+"))
- {
-
clientSocket=newSocket(ipTxt.getText(),Integer.parseInt(portTxt.getText()));
-
dos=newDataOutputStream(clientSocket.getOutputStream());
-
dis=newDataInputStream(clientSocket.getInputStream());
-
bConnect=true;
-
newThread(newReceive()).start();
-
System.out.println("Iamcoming");
-
javax.swing.JOptionPane.showMessageDialog(null,"connectserversuccess");
-
submitBtn.setEnabled(true);
-
inputTxt.addActionListener(newEnterClickAction());
- }
-
else
- {
-
javax.swing.JOptionPane.showMessageDialog(null,"portoripbeinputtedisillegal");
- }
- }
-
catch(UnknownHostExceptionuhe)
- {
-
javax.swing.JOptionPane.showMessageDialog(null,"connectservererror");
- }
-
catch(IOExceptione)
- {
-
javax.swing.JOptionPane.showMessageDialog(null,"connectservererror");
- }
- }
- }
使用说明:
1.先运行服务器端程序,设定好端口号
2.点击Start按钮,运行服务器
3.运行客户端程序
4.设定好昵称
5.设定与服务器端匹配的端口号和服务器的ip地址
6.点击Login按钮,登录到聊天系统
7.可以聊天了。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
综上所述,本程序通过综合运用Java Socket编程、多线程技术和Swing图形界面库,成功实现了具有公聊和私聊功能的聊天室应用。这对于学习网络编程、多线程以及Java GUI开发都有着重要的参考价值。
java Socket,Swing聊天室系统的设计与实现答辩.ppt
"java Socket,Swing聊天室系统的设计与实现毕业论文" 本资源摘要信息提供了关于 Java Socket 和 Swing 聊天室系统的设计与实现的毕业论文。该论文旨在设计和实现一个基于 C/S 架构的聊天室系统,使用 Java 语言、...
在这个项目中,"Java swing实现简单的C/S聊天及文件传输系统"是利用Swing构建一个客户端/服务器(Client/Server)架构的聊天和文件传输应用。这个系统允许用户通过网络进行文本聊天并交换文件。以下是关于这个项目的...
7. **用户界面**:客户端的用户界面通常使用Java Swing或JavaFX库来构建,提供友好的交互体验,包括文本输入框、聊天窗口和按钮等元素。 8. **事件驱动编程**:Java的事件模型使得程序能够响应用户的输入,如点击...
Java Swing 是Java GUI(图形用户界面)库,用于构建桌面应用程序。...总的来说,这个Java Swing和Socket结合的聊天工具是一个综合性的项目,涵盖了GUI设计、网络编程、多线程和并发控制等多个IT领域的知识点。
Java Swing聊天室是一种基于Java GUI(图形用户界面)框架Swing构建的实时通信应用程序。Swing是Java标准库的一部分,提供了丰富的组件库,用于创建桌面应用程序。在这个项目中,我们将探讨如何利用Java Swing来实现...
在这个Java Swing聊天应用中,服务器端会监听特定的端口,等待客户端的连接请求。当客户端连接成功后,服务器会为每个客户端创建一个新的Socket连接,以实现一对一的通信。客户端则通过Socket连接到服务器,向服务器...
2. **GUI(图形用户界面)**:Java的Swing或JavaFX库可以用来创建用户友好的交互界面,包括登录窗口、聊天窗口、在线用户列表等。用户可以通过GUI输入和查看信息,增强了用户体验。 3. **文件IO**:文件输入/输出在...
java 利用swing+socket实现多人聊天程序,分客户端,服务端,运行效果参考博客 https://blog.csdn.net/wcc27857285/article/details/84038401
Java聊天室是一个基于Swing图形用户界面(GUI)和Socket通信技术实现的桌面应用程序。Swing是Java标准版(Java SE)的一部分,提供了一套丰富的组件库,用于创建美观、功能丰富的用户界面。Socket编程是网络编程的...
在这个场景中,Java Socket 和 Swing 框架被广泛应用于构建客户端-服务器(C/S)架构的系统。下面我们将深入探讨这些技术及其在即时聊天程序中的应用。 1. **Java Socket** Java Socket 是 Java 提供的网络编程...
在UI方面,这个简易聊天工具可能使用了Java的Swing或JavaFX库来创建图形用户界面。用户可以输入文本,点击发送按钮将消息通过Socket发送到服务器,同时,程序也会从服务器接收消息并在界面上显示。 代码结构可能...
【标题】"仿QQ聊天系统(java swing)"是一个基于Java Swing开发的桌面...通过这个项目,学习者可以锻炼解决问题的能力,提高对Java Swing、多线程和Socket编程的理解,并了解如何将这些技术应用于实际的聊天系统中。
Java的Socket实现的多人聊天程序是一个基于网络通信的项目,主要利用了Java的Socket类来构建客户端和服务端的通信桥梁。Socket是TCP/IP协议的一部分,它提供了两台计算机之间进行数据传输的基础。在这个项目中,...
通过查看和学习这个项目的源码,开发者可以深入理解Java Swing在实际项目中的应用,以及如何结合网络编程实现一个功能完善的聊天室系统。 总的来说,"java swing 多功能 聊天室"项目展示了Java Swing在构建复杂GUI...
本项目是一套基于java Swing 框架使用socket技术开发的即时通讯系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 ...
总结起来,Java+Swing即时聊天系统是通过结合Java的Swing库构建用户界面,利用多线程进行并发处理,通过Socket进行网络通信,实现用户间的实时消息传递。这样的系统为学习和理解Java的GUI编程、多线程以及网络编程...
【标题】"java多线程+Socket+Swing做的局域网聊天程序"涉及的核心知识点主要涵盖Java编程、多线程、网络通信以及图形用户界面设计。以下将详细阐述这些关键概念及其在实现局域网聊天程序中的应用。 **1. Java编程**...