首页 java中基于tcpsocket的一对一简单聊天室

java中基于tcpsocket的一对一简单聊天室

举报
开通vip

java中基于tcpsocket的一对一简单聊天室java中基于tcpsocket的一对一简单聊天室 江苏经贸职业技术学院 信息技术学院 2015-2016-2学年 《网络编程技术(java)》课程期末大作业 姓名: 高文顶 学号: 1426040147 班级: 14网络 专业: 计算机网络技术 作品名称: 模仿QQ的简单即时通信工具 2016年4月 一、程序功能简介 本程序拥有图形界面和一对一聊天程序,实现监听连接、发送、退出功能。先启动Server服务器端程序进行端口监听,然后启动Client客户端连接Server端IP地址和端口号,Se...

java中基于tcpsocket的一对一简单聊天室
java中基于tcpsocket的一对一简单聊天室 江苏经贸职业技术学院 信息技术学院 2015-2016-2学年 《网络编程技术(java)》课程期末大作业 姓名: 高文顶 学号: 1426040147 班级: 14网络 专业: 计算机网络技术 作品名称: 模仿QQ的简单即时通信工具 2016年4月 一、程序功能简介 本程序拥有图形界面和一对一聊天程序,实现监听连接、发送、退出功能。先启动Server服务器端程序进行端口监听,然后启动Client客户端连接Server端IP地址和端口号,Server端监听到后显示连接成功,可以进行通信。 二、运行界面截图 (一)界面主程序 (二)客户端程序 三、核心代码说明 (一)Client.java核心代码说明示例 packagegwd; importjava.awt.*; importjava.awt.event.*; import java.io.*; importjava.net.InetAddress; importjava.net.InetSocketAddress; importjava.net.Socket; importjava.net.UnknownHostException; importjavax.swing.*; importjavax.swing.border.EmptyBorder; publicclass Client extendsJFrameimplements Runnable, ActionListener, KeyListener { privatestaticfinallongserialVersionUID = 8518610966119429018L; privateJScrollPanetextPane;//滚动条 privateJLabelpcLabel,portLabel;//标签 privateJTextAreachatArea;//聊天内容区域 privateJTextFieldpctextField,porttextField,sendField;//文本框 privateJButtonconnectButton,sendButton;//按钮 private Socket socket;//客户端套接字对象 privateDataInputStreamin;//数据输入流对象 privateDataOutputStreamout;//数据输出流对象 private Thread thread;//线程 privateJComboBoxnamecomboBox;//下拉列表框 public Client() { createUserInterface();//调用图形界面 setTitle("客户端");//设置标题 setSize(550,500);//设置宽度和高度 setResizable( false );//禁用界面最大化 setLocationRelativeTo(null);//自动释放大小 setVisible(true);//窗口显示出来 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击关闭默认关 闭窗口 } publicvoidcreateUserInterface() { setLayout(null);//设置布局 JPanelcontentPane=newJPanel();//创建顶部 panel contentPane.setBounds(5, 5, 525 , 50);//设置panel坐标 add(contentPane);//添加控件到窗口屏幕中 pcLabel = newJLabel("主机:");//创建主机标签 contentPane.add(pcLabel); pctextField = newJTextField();//创建主机文本框 contentPane.add(pctextField); pctextField.setColumns(10); portLabel = newJLabel("端口");//创建端口标签 contentPane.add(portLabel); porttextField = newJTextField();//创建端口文本框 porttextField.setColumns(10); contentPane.add(porttextField); namecomboBox = newJComboBox();//创建下拉列表框 namecomboBox.addItem( "张三" );//设置值 namecomboBox.addItem( "李四" );//设置值 namecomboBox.setSelectedIndex( 0 ); namecomboBox.setEditable(true);//设置允许选择 contentPane.add(namecomboBox); chatArea = newJTextArea();//创建聊天内容区域 chatArea.setLineWrap(true); //设置换行 textPane = newJScrollPane(chatArea);//滚动条 textPane.setBounds(5, 60, 525, 360); add(textPane); sendButton = newJButton("发送");//创建发送按钮 sendButton.setBounds(355, 430, 80, 24); sendButton.addKeyListener(this);//绑定发送按钮键盘对象 sendButton.addActionListener(this);//绑定发送按钮点击对象 add(sendButton); sendField = newJTextField(255);//创建发送文本框 sendField.setBounds(5, 430, 330, 24); sendField.addKeyListener(this);//发送文本框绑定键盘事件 add(sendField); connectButton = newJButton("连接");//创建连接按钮 connectButton.setBounds(450, 430, 80, 24); connectButton.addActionListener(this);//绑定连接按钮对象 contentPane.add(connectButton); socket = new Socket();//创建客户端Sokcet对象 thread = new Thread(this);//创建线程对象 } publicvoid connect() { //创建客户端Socket套接字 try { if (!socket.isConnected()) { //判断套接字是否连接成功 InetAddressaddress = InetAddress.getByName(pctextField.getText());//获取本地IP地址对象 InetSocketAddresssocketAddress = newInetSocketAddress(address, Integer.parseInt(porttextField.getText()));//创建InetSocketAddress对象 socket.connect(socketAddress);//连接服务器 in = newDataInputStream(socket.getInputStream());//创建数 据输入流对象 out = newDataOutputStream(socket.getOutputStream());//创建数据输出流对象 sendButton.setEnabled(true);//启动发送按钮 if (!(thread.isAlive())) { //判断线程是否激活 thread = new Thread(this);//创建线程对象 } thread.start();//启动线程 } } catch (Exception e) { System.out.println(e); socket = new Socket();//创建Socket对象 } } publicvoid send() { //向客户端发送消息 String msg = sendField.getText().trim();//获取发送消息内容 if (msg.isEmpty()) { //判断是否为空 JOptionPane.showMessageDialog(this, "请输入发送消息.");//提示消息 return; } chatArea.append(namecomboBox.getSelectedItem()+": " + msg + "\n");//追加文本到聊天内容区域中 try { out.writeUTF(namecomboBox.getSelectedItem()+": "+msg);//发送消息到客户端 sendField.setText("");//清空消息 } catch (Exception e) { e.printStackTrace(); } } publicvoidactionPerformed(ActionEventarg0) { //点击事件 if (arg0.getSource() == sendButton) { //发送按钮 send();//发送消息 } elseif (arg0.getSource() == connectButton) { //连接对象 connect();//启动客户端套接字对象 } } publicvoid run() { //启动线程 if (Thread.currentThread() == thread) { //判断是否当前线程 String msg = null; while (true) { //循环接收客户端消息 try { msg = in.readUTF();//将数据读取出来 chatArea.append("服务器: " + msg + "\n");//显示文本域中 } catch (IOExceptione) { e.printStackTrace(); socket = new Socket(); break; } } } } publicvoidkeyPressed(KeyEventarg0) { // 键盘按下 if (arg0.getKeyCode() == KeyEvent.VK_ENTER) { send();//发送消息 } } @Override publicvoidkeyReleased(KeyEventarg0) { } @Override publicvoidkeyTyped(KeyEventarg0) { } publicstaticvoid main(String[] args) { EventQueue.invokeLater(new Runnable() { publicvoid run() { try { Client frame = newClient(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } } 二、Server.java核心代码说明示例 packagegwd; importjava.awt.*; importjavax.swing.*; importjavax.swing.border.EmptyBorder; importjava.awt.event.*; importjava.io.BufferedReader; importjava.io.InputStreamReader; importjava.io.PrintWriter; importjava.net.ServerSocket; importjava.net.Socket; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjava.awt.event.KeyEvent; importjava.awt.event.KeyListener; importjava.io.DataInputStream; importjava.io.DataOutputStream; importjava.io.IOException; importjavax.swing.JButton; importjavax.swing.JFrame; importjavax.swing.JOptionPane; importjavax.swing.JPanel; importjavax.swing.JScrollPane; importjavax.swing.JTextArea; importjavax.swing.JTextField; public class Server extends JFrame implements Runnable, ActionListener, KeyListener { private JScrollPanetextPane;//滚动条 private JLabelportLabel;//标签 private JTextAreachatArea;//聊天内容区域 private JTextFieldportField,sendField;//文本框 private JButtonsendButton,startButton;//按钮 private ServerSocketserversocket;//服务器套接字对象 private Socket socket;//客户端套接字对象 private DataInputStream in;//数据输入流对象 private DataOutputStream out;//数据输出流对象 private Thread thread;//线程 public Server() { createUserInterface();//调用图形界面 setTitle("服务器");//设置标题 setSize(550,500);//设置宽度和高度 setResizable( false );//禁用界面最大化 setLocationRelativeTo(null);//自动释放大小 setVisible(true); //显示出来 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击关闭默认关闭窗口 } public void createUserInterface() { setLayout(null);//设置布局 JPanelcontentPane=new JPanel();//创建顶部 panel contentPane.setBounds(5, 5, 525, 50);//设置panel坐标 add(contentPane); portLabel = new JLabel("端口");//创建端口标签 contentPane.add(portLabel); portField = new JTextField();//创建端口文本框 contentPane.add(portField); portField.setColumns(10); chatArea = new JTextArea();//创建聊天内容区域 chatArea.setLineWrap(true);//设置换行 textPane = new JScrollPane(chatArea);//滚动条 textPane.setBounds(5, 60, 525, 360); add(textPane); sendButton = new JButton("发送");//创建发送按钮 sendButton.setBounds(355, 430, 80, 24); sendButton.addActionListener(this);//绑定发送按钮点击对象 add(sendButton); sendField = new JTextField(255);//创建发送文本框 sendField.setBounds(5, 430, 330, 24); sendField.addKeyListener(this);//消息框绑定键盘事件监听 add(sendField); startButton = new JButton("启动");//创建启动按钮 startButton.setBounds(450, 430, 80, 24); startButton.addActionListener(this);//绑定启动按钮对象 contentPane.add(startButton); thread = new Thread();//创建线程对象 } public void connect() { //创建服务器ServerSocket套接字 try { chatArea.append("请稍等...\n");//添加文本到聊天内容区域中 serversocket = new ServerSocket(Integer.parseInt(portField.getText()));//创建ServerSocket套接字对象 socket = serversocket.accept();//接收客户端套接字对象 chatArea.append("连接成功... \n");//追加信息到聊天内容区域中,显示成功连接服务器 in = new DataInputStream(socket.getInputStream());//创建数据输入流对象 out = new DataOutputStream(socket.getOutputStream());//创建数据输出流对象 if (!thread.isAlive()) { //判断线程是否激活 thread = new Thread(this);//创建线程对象 } thread.start();//启动线程 } catch (Exception e) { System.out.println(e); try { serversocket = new ServerSocket();//创建ServerSocket套接字对象 } catch (IOException e1) { e1.printStackTrace(); } } } public void send() { //向客户端发送消息 String msg = sendField.getText().trim();//获取发送消息内容 if (msg.isEmpty()) { //判断是否为空 JOptionPane.showMessageDialog(this, "请输入发送消息.");//提示消息 return; } chatArea.append("服务器: " + msg + "\n");//追加文本到聊天内容区域中 try { out.writeUTF(msg);//发送消息到客户端 sendField.setText(""); } catch (Exception e) { e.printStackTrace(); } } public void actionPerformed(ActionEvent arg0) { //键盘事件 if (arg0.getSource() == sendButton) { //发送按钮 send();//发送消息 } else if (arg0.getSource() == startButton) { //连接对象 connect();//启动服务器套接字对象 } } public void run() { //启动线程 if (Thread.currentThread() == thread) { //判断是否当前线程 String msg = null; while (true) { //循环接收客户端消息 try { msg = in.readUTF();//将数据读取出来 chatArea.append(msg + "\n");//显示在聊天内容区域中 } catch (IOException e) { e.printStackTrace(); try { serversocket = new ServerSocket(4331); } catch (IOException e1) { e1.printStackTrace(); } break; } } } } public void keyPressed(KeyEvent arg0) { // 键盘按下 if (arg0.getKeyCode() == KeyEvent.VK_ENTER) { send();//发送消息 } } @Override public void keyReleased(KeyEvent arg0) { } @Override public void keyTyped(KeyEvent arg0) { } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Server frame = new Server(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } } 四、创新点说明 本程序基于TCPsocket实现网络即时通信,客户端可用多种 身份与服务器端聊天,方便、快捷、易懂。
本文档为【java中基于tcpsocket的一对一简单聊天室】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_751406
暂无简介~
格式:doc
大小:63KB
软件:Word
页数:16
分类:初中语文
上传时间:2017-09-02
浏览量:71