Java中基于TCPsocket的一对一简单聊天室.docx
- 文档编号:8798197
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:17
- 大小:49.92KB
Java中基于TCPsocket的一对一简单聊天室.docx
《Java中基于TCPsocket的一对一简单聊天室.docx》由会员分享,可在线阅读,更多相关《Java中基于TCPsocket的一对一简单聊天室.docx(17页珍藏版)》请在冰点文库上搜索。
Java中基于TCPsocket的一对一简单聊天室
江苏经贸职业技术学院
信息技术学院
2015-2016-2学年
《网络编程技术(java)》课程期末大作业
姓名:
高文顶
学号:
1426040147
班级:
14网络
专业:
计算机网络技术
作品名称:
模仿QQ的简单即时通信工具
2016年4月
一、程序功能简介
本程序拥有图形界面和一对一聊天程序,实现监听连接、发送、退出功能。
先启动Server服务器端程序进行端口监听,然后启动Client客户端连接Server端IP地址和端口号,Server端监听到后显示连接成功,可以进行通信。
二、运行界面截图
(一)界面主程序
(二)客户端程序
三、核心代码说明
(一)Client.java核心代码说明示例
packagegwd;
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
import.InetAddress;
import.InetSocketAddress;
import.Socket;
import.UnknownHostException;
importjavax.swing.*;
importjavax.swing.border.EmptyBorder;
publicclassClientextendsJFrameimplementsRunnable,ActionListener,KeyListener{
privatestaticfinallongserialVersionUID=8518610966119429018L;
privateJScrollPanetextPane;//滚动条
privateJLabelpcLabel,portLabel;//标签
privateJTextAreachatArea;//聊天内容区域
privateJTextFieldpctextField,porttextField,sendField;//文本框
privateJButtonconnectButton,sendButton;//按钮
privateSocketsocket;//客户端套接字对象
privateDataInputStreamin;//数据输入流对象
privateDataOutputStreamout;//数据输出流对象
privateThreadthread;//线程
privateJComboBoxnamecomboBox;//下拉列表框
publicClient(){
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=newSocket();//创建客户端Sokcet对象
thread=newThread(this);//创建线程对象
}
publicvoidconnect(){//创建客户端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=newThread(this);//创建线程对象
}
thread.start();//启动线程
}
}catch(Exceptione){
System.out.println(e);
socket=newSocket();//创建Socket对象
}
}
publicvoidsend(){//向客户端发送消息
Stringmsg=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(Exceptione){
e.printStackTrace();
}
}
publicvoidactionPerformed(ActionEventarg0){//点击事件
if(arg0.getSource()==sendButton){//发送按钮
send();//发送消息
}elseif(arg0.getSource()==connectButton){//连接对象
connect();//启动客户端套接字对象
}
}
publicvoidrun(){//启动线程
if(Thread.currentThread()==thread){//判断是否当前线程
Stringmsg=null;
while(true){//循环接收客户端消息
try{
msg=in.readUTF();//将数据读取出来
chatArea.append("服务器:
"+msg+"\n");//显示文本域中
}catch(IOExceptione){
e.printStackTrace();
socket=newSocket();
break;
}
}
}
}
publicvoidkeyPressed(KeyEventarg0){//键盘按下
if(arg0.getKeyCode()==KeyEvent.VK_ENTER){
send();//发送消息
}
}
@Override
publicvoidkeyReleased(KeyEventarg0){
}
@Override
publicvoidkeyTyped(KeyEventarg0){
}
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
Clientframe=newClient();
frame.setVisible(true);
}catch(Exceptione){
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;
import.ServerSocket;
import.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;
publicclassServerextendsJFrameimplementsRunnable,ActionListener,KeyListener{
privateJScrollPanetextPane;//滚动条
privateJLabelportLabel;//标签
privateJTextAreachatArea;//聊天内容区域
privateJTextFieldportField,sendField;//文本框
privateJButtonsendButton,startButton;//按钮
privateServerSocketserversocket;//服务器套接字对象
privateSocketsocket;//客户端套接字对象
privateDataInputStreamin;//数据输入流对象
privateDataOutputStreamout;//数据输出流对象
privateThreadthread;//线程
publicServer(){
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);
portLabel=newJLabel("端口");//创建端口标签
contentPane.add(portLabel);
portField=newJTextField();//创建端口文本框
contentPane.add(portField);
portField.setColumns(10);
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.addActionListener(this);//绑定发送按钮点击对象
add(sendButton);
sendField=newJTextField(255);//创建发送文本框
sendField.setBounds(5,430,330,24);
sendField.addKeyListener(this);//消息框绑定键盘事件监听
add(sendField);
startButton=newJButton("启动");//创建启动按钮
startButton.setBounds(450,430,80,24);
startButton.addActionListener(this);//绑定启动按钮对象
contentPane.add(startButton);
thread=newThread();//创建线程对象
}
publicvoidconnect(){//创建服务器ServerSocket套接字
try{
chatArea.append("请稍等...\n");//添加文本到聊天内容区域中
serversocket=newServerSocket(Integer.parseInt(portField.getText()));//创建ServerSocket套接字对象
socket=serversocket.accept();//接收客户端套接字对象
chatArea.append("连接成功...\n");//追加信息到聊天内容区域中,显示成功连接服务器
in=newDataInputStream(socket.getInputStream());//创建数据输入流对象
out=newDataOutputStream(socket.getOutputStream());//创建数据输出流对象
if(!
thread.isAlive()){//判断线程是否激活
thread=newThread(this);//创建线程对象
}
thread.start();//启动线程
}catch(Exceptione){
System.out.println(e);
try{
serversocket=newServerSocket();//创建ServerSocket套接字对象
}catch(IOExceptione1){
e1.printStackTrace();
}
}
}
publicvoidsend(){//向客户端发送消息
Stringmsg=sendField.getText().trim();//获取发送消息内容
if(msg.isEmpty()){//判断是否为空
JOptionPane.showMessageDialog(this,"请输入发送消息.");//提示消息
return;
}
chatArea.append("服务器:
"+msg+"\n");//追加文本到聊天内容区域中
try{
out.writeUTF(msg);//发送消息到客户端
sendField.setText("");
}catch(Exceptione){
e.printStackTrace();
}
}
publicvoidactionPerformed(ActionEventarg0){//键盘事件
if(arg0.getSource()==sendButton){//发送按钮
send();//发送消息
}elseif(arg0.getSource()==startButton){//连接对象
connect();//启动服务器套接字对象
}
}
publicvoidrun(){//启动线程
if(Thread.currentThread()==thread){//判断是否当前线程
Stringmsg=null;
while(true){//循环接收客户端消息
try{
msg=in.readUTF();//将数据读取出来
chatArea.append(msg+"\n");//显示在聊天内容区域中
}catch(IOExceptione){
e.printStackTrace();
try{
serversocket=newServerSocket(4331);
}catch(IOExceptione1){
e1.printStackTrace();
}
break;
}
}
}
}
publicvoidkeyPressed(KeyEventarg0){//键盘按下
if(arg0.getKeyCode()==KeyEvent.VK_ENTER){
send();//发送消息
}
}
@Override
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 基于 TCPsocket 一对一 简单 聊天室