Java中基于TCPsocket的一对一简单聊天室.docx
- 文档编号:9220566
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:16
- 大小:50.02KB
Java中基于TCPsocket的一对一简单聊天室.docx
《Java中基于TCPsocket的一对一简单聊天室.docx》由会员分享,可在线阅读,更多相关《Java中基于TCPsocket的一对一简单聊天室.docx(16页珍藏版)》请在冰豆网上搜索。
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、*;
importjava、net、InetAddress;
importjava、net、InetSocketAddress;
importjava、net、Socket;
importjava、net、UnknownHostException;
importjavax、swing、*;
importjavax、swing、border、EmptyBorder;
publicclassClientextendsJFrameimplementsRunnable,ActionListener,KeyListener{
privatestaticfinallongserialVersionUID=85429018L;
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;
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;
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
publicvoidkeyReleased(KeyEventarg0){
}
@Override
publicvoid
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 基于 TCPsocket 一对一 简单 聊天室