Java中基于TCPsocket的一对一简单聊天室_第1页
Java中基于TCPsocket的一对一简单聊天室_第2页
Java中基于TCPsocket的一对一简单聊天室_第3页
Java中基于TCPsocket的一对一简单聊天室_第4页
Java中基于TCPsocket的一对一简单聊天室_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、江苏经贸职业技术学院信息技术学院2015-2016-2学年网络编程技术(java)课程期末大作业姓 名:高文顶学 号:班 级:14网络专 业:计算机网络技术作品名称:模仿QQ的简单即时通信工具2016年4月一、程序功能简介本程序拥有图形界面和一对一聊天程序,实现监听连接、发送、退出功能。先启动Server服务器端程序进行端口监听,然后启动Client客户端连接Server端IP地址和端口号,Server端监听到后显示连接成功,可以进行通信。二、运行界面截图(一)界面主程序(二)客户端程序三、核心代码说明(一)Client.java核心代码说明示例package gwd;import java.

2、awt.*;import java.awt.event.*;import java.io.*;import .InetAddress;import .InetSocketAddress;import .Socket;import .UnknownHostException;import javax.swing.*;import javax.swing.border.EmptyBorder;public class Client extends JFrame implements Runnable, ActionListener,

3、KeyListener private static final long serialVersionUID = L;private JScrollPane textPane;/滚动条private JLabel pcLabel,portLabel;/标签private JTextArea chatArea;/聊天内容区域private JTextField pctextField,porttextField,sendField;/文本框private JButton connectButton,sendButton;/按钮private Socket socket;/客户端套接字对象priv

4、ate DataInputStream in;/数据输入流对象private DataOutputStream out;/数据输出流对象private Thread thread;/线程private JComboBox namecomboBox;/下拉列表框public Client() createUserInterface();/调用图形界面setTitle(客户端);/设置标题setSize(550,500);/设置宽度 和高度setResizable( false );/禁用界面最大化setLocationRelativeTo(null);/自动释放大小setVisible(true

5、);/窗口显示出来setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/点击关闭 默认关闭窗口public void createUserInterface() setLayout(null);/设置布局JPanel contentPane=new JPanel();/创建顶部 panelcontentPane.setBounds(5, 5, 525 , 50);/设置panel坐标add(contentPane);/添加控件到 窗口屏幕中pcLabel = new JLabel(主机:);/创建主机标签contentPane.add(pcLabel)

6、;pctextField = new JTextField();/创建主机文本框contentPane.add(pctextField);pctextField.setColumns(10);portLabel = new JLabel(端口);/创建端口标签contentPane.add(portLabel);porttextField = new JTextField();/创建端口文本框porttextField.setColumns(10);contentPane.add(porttextField); namecomboBox = new JComboBox();/创建下拉列表框na

7、mecomboBox.addItem( 张三 );/设置值namecomboBox.addItem( 李四 );/设置值namecomboBox.setSelectedIndex( 0 );namecomboBox.setEditable(true);/设置允许 选择contentPane.add(namecomboBox);chatArea = new JTextArea();/创建聊天内容区域chatArea.setLineWrap(true);/设置换行textPane = new JScrollPane(chatArea);/滚动条textPane.setBounds(5, 60, 5

8、25, 360);add(textPane);sendButton = new JButton(发送);/创建发送按钮sendButton.setBounds(355, 430, 80, 24);sendButton.addKeyListener(this);/绑定发送按钮键盘对象sendButton.addActionListener(this);/绑定发送按钮点击对象add(sendButton);sendField = new JTextField(255);/创建发送文本框sendField.setBounds(5, 430, 330, 24);sendField.addKeyList

9、ener(this);/发送文本框绑定键盘事件add(sendField);connectButton = new JButton(连接);/创建连接按钮connectButton.setBounds(450, 430, 80, 24);connectButton.addActionListener(this);/绑定连接按钮对象contentPane.add(connectButton);socket = new Socket();/创建客户端Sokcet对象thread = new Thread(this);/创建线程对象public void connect() /创建客户端Socket

10、套接字try if (!socket.isConnected() /判断套接字是否连接成功InetAddress address = InetAddress.getByName(pctextField.getText();/获取本地IP地址对象InetSocketAddress socketAddress = new InetSocketAddress(address, Integer.parseInt(porttextField.getText();/创建InetSocketAddress对象socket.connect(socketAddress);/连接服务器in = new DataI

11、nputStream(socket.getInputStream();/创建数据输入流对象out = new DataOutputStream(socket.getOutputStream();/创建数据输出流对象sendButton.setEnabled(true);/启动发送按钮if (!(thread.isAlive() /判断线程是否激活thread = new Thread(this);/创建线程对象thread.start();/启动线程 catch (Exception e) System.out.println(e);socket = new Socket();/创建Socke

12、t对象public void 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);/发送消息到客

13、户端sendField.setText();/清空消息 catch (Exception e) e.printStackTrace();public void actionPerformed(ActionEvent arg0) /点击事件if (arg0.getSource() = sendButton) /发送按钮send();/发送消息 else if (arg0.getSource() = connectButton) /连接对象connect();/启动客户端套接字对象public void run() /启动线程if (Thread.currentThread() = thread)

14、 /判断是否 当前线程String msg = null;while (true) /循环接收客户端消息try msg = in.readUTF();/将数据读取出来chatArea.append(服务器: + msg + n);/显示文本域中 catch (IOException e) e.printStackTrace();socket = new Socket();break;public void keyPressed(KeyEvent arg0) / 键盘按下if (arg0.getKeyCode() = KeyEvent.VK_ENTER) send();/发送消息Override

15、public void keyReleased(KeyEvent arg0) Overridepublic void keyTyped(KeyEvent arg0) public static void main(String args) EventQueue.invokeLater(new Runnable() public void run() try Client frame = new Client();frame.setVisible(true); catch (Exception e) e.printStackTrace(););二、Server.java核心代码说明示例packa

16、ge gwd;import java.awt.*;import javax.swing.*;import javax.swing.border.EmptyBorder;import java.awt.event.*;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import .ServerSocket;import .Socket;import java.awt.event.ActionEvent;import java.awt.

17、event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.s

18、wing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;public class Server extends JFrame implements Runnable, ActionListener, KeyListener private JScrollPane textPane;/滚动条private JLabel portLabel;/标签private JTextArea chatArea;/聊天内容区域private JTextField portField,sendField;/文本框pr

19、ivate JButton sendButton,startButton;/按钮private ServerSocket serversocket;/服务器套接字对象private Socket socket;/客户端套接字对象private DataInputStream in;/数据输入流对象private DataOutputStream out;/数据输出流对象private Thread thread;/线程public Server() createUserInterface();/调用图形界面setTitle(服务器);/设置标题setSize(550,500);/设置宽度 和高

20、度setResizable( false );/禁用界面最大化setLocationRelativeTo(null);/自动释放大小setVisible(true); /显示出来setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/点击关闭 默认关闭窗口public void createUserInterface() setLayout(null);/设置布局JPanel contentPane=new JPanel();/创建顶部 panelcontentPane.setBounds(5, 5, 525, 50);/设置panel坐标add(con

21、tentPane);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,

22、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);startBut

23、ton = 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.pars

24、eInt(portField.getText();/创建ServerSocket 套接字对象socket = serversocket.accept();/接收 客户端 套接字对象chatArea.append(连接成功. n);/追加信息到聊天内容区域中,显示成功连接服务器in = new DataInputStream(socket.getInputStream();/创建数据输入流对象out = new DataOutputStream(socket.getOutputStream();/创建数据输出流对象if (!thread.isAlive() /判断线程是否激活thread = n

25、ew 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.g

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论