计算机网络编程实验.docx
- 文档编号:24745326
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:16
- 大小:301.40KB
计算机网络编程实验.docx
《计算机网络编程实验.docx》由会员分享,可在线阅读,更多相关《计算机网络编程实验.docx(16页珍藏版)》请在冰豆网上搜索。
计算机网络编程实验
《计算机网络编程技术》
实训报告
基于UDP协议多客户有图形用户界面的网上聊天程序
UDP-basedprotocolmulti-clientwithagraphicaluserinterface,onlinechatprogram
班级:
姓名:
学号:
伊犁师范学院电子与信息工程学院
1.实验目的
巩固所学的Java语言基础知识,增进Java语言的编辑基本功,拓展常用类库的应用,了解Java网络程序设计的思路和方法,熟练掌握UDP协议编写程序的设计方法,掌握基本网络包的使用方法,熟练使用Socket以及多线程。
2.实验内容
运用Java程序编写聊天室,实现一个基于UDP协议的简单的聊天程序,支持多人聊天并且客户端具有图形化用户界面。
程序实现了聊天室的基本功能,其中有:
1.启动服务器。
2.启动登录界面。
3.进入客户端界面。
4.发送信息。
5.离开客户端界面。
6.关闭服务器。
三、实验环境
操作系统:
Windows平台。
测试环境:
Eclipse。
四、实验步骤
1.创建项目,组织文件
启动Eclipse,建立项目、包及各类,键入代码,操作结果如图1所示。
图1项目和文件
2.运行程序进行测试
(1)首先运行Server.java,打开“聊天室服务器”。
服务器IP地址为192.168.0.2
如图2所示。
图2服务器控制台
(2)服务器监听是否有新聊天者连接,如果没有,一直等待。
如图3所示。
图3服务器等待
(3)运行客户端程序client.java,打开“多人聊天室“界面,客户端1的IP地址为192.168.0.3客户端2的IP地址为192.168.0.49,如图4所示。
图4聊天室客户端界面
(4)在“多人聊天室”界面输入框输入聊天信息。
如图5所示。
图5在输入框输入聊天信息
(5)在“多人聊天室”界面发送信息。
如图6所示。
图6发送聊天信息
(6)服务器端显示两个客户端聊天内容,如图7所示。
图7服务器端显示聊天内容
(7)退出服务器和多人聊天室。
五、程序清单
//多人聊天室服务器端
packageChatFrame_01;
import.DatagramPacket;
import.DatagramSocket;
import.InetAddress;
import.Socket;
importjava.util.*;
publicclassServer{
Listips=newArrayList();
DatagramSocketsocket;
DatagramPacketpacket;
DatagramSocketssocket;
DatagramPacketspacket;
publicServer()throwsException{
socket=newDatagramSocket(6666);
ssocket=newDatagramSocket(8888);
}
publicvoidlisten()throwsException{
byte[]array=newbyte[100];
packet=newDatagramPacket(array,array.length);
socket.receive(packet);
byte[]data=packet.getData();
Stringreceived=newString(data,0,data.length,"UTF-8");
System.out.println(received);
String[]ss=received.split("\\|");
Stringip=ss[0];
byte[]dt=ss[1].getBytes("UTF-8");
spacket=newDatagramPacket(dt,dt.length,InetAddress.getByName(ip),3333);
ssocket.send(spacket);
}
publicstaticvoidmain(String[]args)throwsException{
Servers=newServer();
while(true){
s.listen();
}
}
}
//多人聊天室客户端
packageChatFrame_01;
importjava.io.*;
importjavax.swing.UIManager;
importjava.awt.*;
publicclassChatApp{
booleanpackFrame=false;
ChatApp(){
ChatFrameframe=newChatFrame();
if(packFrame){
frame.pack();
}else{
frame.validate();
}
//放置窗体在屏幕中央
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
DimensionframeSize=frame.getSize();
if(frameSize.height>screenSize.height){
frameSize.height=screenSize.height;
}
if(frameSize.width>screenSize.width){
frameSize.width=screenSize.width;
}
frame.setLocation((screenSize.width-frameSize.width)/2,
(screenSize.height-frameSize.height)/2);
frame.setVisible(true);
frame.waitforpackets();
}
publicstaticvoidmain(String[]args){
newChatApp();
}
}
//登录窗口
packageChatFrame_01;
import.*;
importjava.io.*;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.lang.*;
importjava.awt.color.*;
importjavax.swing.JOptionPane;
publicclassChatFrameextendsJFrame{
JPanelcontentPane;
JLabellabel1=newJLabel();//发送消息
JLabellabel2=newJLabel();//输入ip
Labellabel3=newLabel();//输入端口标签
Labellabel4=newLabel();//输出端口标签
JTextFieldtextField1=newJTextField();//发送消息
JTextFieldtextField2=newJTextField();//输入ip
JTextFieldtextField3=newJTextField();//获得输入端口
JTextFieldtextField4=newJTextField();//获得输出端口
JButtonbutton1=newJButton("发送");//发送消息
TextAreatextArea1=newTextArea();
JOptionPanejopane=newJOptionPane();
DatagramPacketsendpacket,receivepacket;//声明发送和接收数据包
DatagramSocketsendsocket,receivesocket;//声明发送和接收DatagramSocket
publicChatFrame(){
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try{
toInit();
}catch(Exceptione){
e.printStackTrace();
}
}
privatevoidtoInit()throwsException{
contentPane=(JPanel)this.getContentPane();
label1.setText("发送信息:
");
label1.setBounds(newRectangle(13,100,60,21));
contentPane.setLayout(null);
contentPane.setBackground(Color.pink);
this.setSize(newDimension(363,502));
this.setTitle("多人聊天室");
label2.setText("输入对方IP地址:
");
label2.setBounds(newRectangle(12,19,109,23));
label3.setText("输入端口:
");
label3.setBounds(newRectangle(12,58,55,22));
label4.setText("输出端口:
");
label4.setBounds(newRectangle(180,58,55,22));
textField3.setText("3000");
textField4.setText("3001");
button1.setBounds(newRectangle(280,100,59,21));
button1.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(ActionEvente){
button1_actionPerformed(e);
}
});
textField1.addKeyListener(newKeyAdapter(){
publicvoidkeyPressed(KeyEvente){
if(e.getKeyCode()==KeyEvent.VK_ENTER){
Stringstr=textField2.getText();
Stringstr1=textField1.getText();
if(pareTo("")!
=0&&!
"".equals(str1)){
try{
textArea1.append("\nto"+textField2.getText()
+":
"+"3000"+"say:
"
+textField1.getText());
Strings=textField1.getText();
bytedata[]=s.getBytes("UTF-8");
sendpacket=newDatagramPacket(
data,
data.length,
InetAddress.getByName("192.168.0.19"),
6666);
sendsocket.send(sendpacket);
}catch(IOExceptionexc){
exc.printStackTrace();
}
textField1.setText("");
}
}
}
});
textField4.setBounds(newRectangle(240,58,90,22));
textField3.setBounds(newRectangle(70,58,90,22));
textField2.setBounds(newRectangle(123,20,120,19));
textField1.setBounds(newRectangle(76,100,190,19));
textArea1.setBounds(newRectangle(11,140,333,315));
textArea1.setEditable(false);
textArea1.setBackground(Color.white);
contentPane.add(label4,null);
contentPane.add(label3,null);
contentPane.add(label2,null);
contentPane.add(label1,null);
contentPane.add(textField1,null);
contentPane.add(textField2,null);
contentPane.add(textField3,null);
contentPane.add(textField4,null);
contentPane.add(textArea1,null);
contentPane.add(button1,null);
this.setVisible(true);
bind();
}
protectedvoidprocessWindowEvent(WindowEvente){
super.processWindowEvent(e);
if(e.getID()==WindowEvent.WINDOW_CLOSING){
System.exit(0);
}
}
publicvoidwaitforpackets(){//检测并接受对方发来的消息
while(true){
try{
byte[]array=newbyte[100];
receivepacket=newDatagramPacket(array,array.length);
receivesocket.receive(receivepacket);//接收
textArea1.append("\nfrom"+receivepacket.getAddress()+":
"
+receivepacket.getPort()+"get:
");
Stringreceived=newString(receivepacket.getData(),0,
receivepacket.getLength(),"UTF-8");
textArea1.append(received);
}catch(IOExceptionse){
se.printStackTrace();
}
}
}
voidbind(){//和对方建立连
try{
sendsocket=newDatagramSocket(3000);
receivesocket=newDatagramSocket(3333);
}catch(Exceptione){
}
}
voidbutton1_actionPerformed(ActionEvente){//发送消息到对方
Stringstr=textField2.getText();
Stringstr1=textField1.getText();
if(pareTo("")!
=0&&!
"".equals(str1)){
try{
textArea1.append("\nto"+textField2.getText()+":
"+"3000"
+"say:
"+textField1.getText());
Strings=textField2.getText()+"|"+textField1.getText();
bytedata[]=s.getBytes("UTF-8");
sendpacket=newDatagramPacket(data,data.length,InetAddress
.getByName("192.168.0.19"),6666);
sendsocket.send(sendpacket);
}catch(IOExceptionexc){
exc.printStackTrace();
}
textField1.setText("");
}
}
}
六、总结
通过本次实验,使我们对基于UDP协议多线程聊天程序的设计有了进一步的认识,巩固了所学的Java语言基础知识,增进了Java语言的编辑基本功,拓展了常用类库的应用,了解到Java网络程序设计的思路和方法,熟练掌握了UDP协议编写程序的设计方法,掌握了基本网络包的使用方法,并学会熟练使用Socket以及多线程。
运用Java程序编写聊天室,实现一个基于UDP协议的简单的聊天程序,支持多人聊天并且客户端具有图形化用户界面。
程序实现了聊天室的基本功能。
在操作当中,虽然我们遇到了很多问题,但是通过我们的努力,所有问题都得到了解决,并且增长了我们我们的知识,使我们在这次实验中受益颇多。
这也是我们懂得在以后的实验编程中要充分发挥认真仔细,坚持不懈,实事求是的精神,是自己活得更大的进步。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 编程 实验