完整计算机网络TCP聊天室实验报告.docx
- 文档编号:7533412
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:21
- 大小:130.06KB
完整计算机网络TCP聊天室实验报告.docx
《完整计算机网络TCP聊天室实验报告.docx》由会员分享,可在线阅读,更多相关《完整计算机网络TCP聊天室实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
完整计算机网络TCP聊天室实验报告
(完整)计算机网络TCP聊天室实验报告
编辑整理:
尊敬的读者朋友们:
这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)计算机网络TCP聊天室实验报告)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)计算机网络TCP聊天室实验报告的全部内容。
计算机网络原理
实验报 告书
姓名:
XXX
班级:
XXXXXX
学号:
XXXXXXXXXX
XXXXXXXXXXXX
二0一一年五月
socket编程
一、实验目的
本次实验的目的是通过利用Socket编写简单的客户/服务器程序,了解TCP/IP网络的基本通信原理和编程方法,初步掌握TCP/IP网络的传输层上的编程接口(WindowsSocketsAPI),学会利用这些接口来编写简单的网络通信软件.
二、实验内容
利用socket编写简单的客户/服务器程序,比如聊天室、文件传输等。
三、实验步骤
Ø思路分析
✧将服务器与客户端分两部分实现,采用多线程实现多个客户端与服务器端连接
✧客户端建立一个Socket与服务器端连接,成功后通过这个Socket来发送和接收数据就可以了。
✧服务器端通过创建一个Socket的Arraylist数组,与指定的本地端口绑定,就可以在端口进行侦听。
如果有客户端连接请求,则在数组中选择一个空Socket,将客户端地址赋给这个Socket。
然后登录成功的客户就可以在服务器上聊天了.
Ø代码实现
ØpackageTCP_chat_room.gui;
Ø
Øimportjava.io。
IOException;
Ø
ØpublicclassClientApp{
Øpublicstaticvoidmain(String[]args){
Ø/**
Ø*javax.swing.UIManager$LookAndFeelInfo[Metaljavax。
swing。
plaf。
metal。
MetalLookAndFeel]
Øjavax。
swing。
UIManager$LookAndFeelInfo[Nimbuscom.sun.java.swing。
plaf.nimbus。
NimbusLookAndFeel]
Øjavax。
swing.UIManager$LookAndFeelInfo[CDE/Motifcom.sun.java.swing.plaf。
motif。
MotifLookAndFeel]
Øjavax.swing.UIManager$LookAndFeelInfo[Windowscom.sun。
java。
swing。
plaf.windows。
WindowsLookAndFeel]
Øjavax.swing。
UIManager$LookAndFeelInfo[WindowsClassiccom。
sun.java。
swing。
plaf。
windows。
WindowsClassicLookAndFeel]
Ø*@authorAdministrator
Ø*
Ø*/
Øtry{
Ø//使用Nimbus皮肤
ØUIManager.setLookAndFeel("com。
sun。
java。
swing.plaf。
nimbus。
NimbusLookAndFeel");
Ø//localhost或127.0.0.1
ØClientFramefrClientFrame=newClientFrame("localhost”,Server。
CHAT_ROOM_PORT);
ØfrClientFrame。
setConnected(true);
ØfrClientFrame。
setVisible(true);
Ø//如果登录成功
Øif(frClientFrame.login(”222”)){
ØfrClientFrame。
receiveMessage();
Ø}
Ø}catch(ClassNotFoundExceptione){
Øe.printStackTrace();
Ø}catch(InstantiationExceptione){
Øe.printStackTrace();
Ø}catch(IllegalAccessExceptione){
Øe。
printStackTrace();
Ø}catch(UnsupportedLookAndFeelExceptione){
Øe。
printStackTrace();
Ø}catch(IOExceptione){
Øe.printStackTrace();
Ø}
Ø}
Ø
Ø
Ø}
packageTCP_chat_room.action;
importjava.awt。
AWTException;
publicclassClientFrameActionextendsWindowAdapter{
privateClientFramefrClientFrame;
publicClientFrameAction(ClientFramefrClientFrame){
this.frClientFrame=frClientFrame;
}
publicvoidwindowIconified(WindowEvente){
if(SystemTray.isSupported()){
finalSystemTraysystem=SystemTray.getSystemTray();
Imageimage=ImageManager.getImage(”piScreen。
gif");
finalStringtoolTip=newString("大家聊天室”);
finalPopupMenupopup=newPopupMenu();
finalMenuItemmiRevert=newMenuItem(”Restore");
finalMenuItemmiAddFriends=newMenuItem("AddFriends");
finalMenuItemmiRemoveFriends=newMenuItem("RemoveFriends");
finalMenuItemmiModifyFriendsInfo=newMenuItem("ModifyFriendsInfomation”);
finalMenuItemmiSearch=newMenuItem("SearchFriends");
finalMenuItemmiExit=newMenuItem(”Exit");
popup.add(miRevert);
popup.addSeparator();
popup。
add(miAddFriends);
popup.add(miRemoveFriends);
popup。
add(miModifyFriendsInfo);
popup.add(miSearch);
popup。
addSeparator();
popup。
add(miExit);
finalTrayIconicon=newTrayIcon(image,toolTip,popup);
try{
system.add(icon);
frClientFrame.setVisible(false);
}catch(AWTExceptione1){
System。
out.print(”软件在系统通知区域显示出错");
e1.printStackTrace();
}
miRevert。
addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
system。
remove(icon);
frClientFrame。
setVisible(true);
frClientFrame.setState(JFrame。
NORMAL);
}
});
miAddFriends。
addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
frClientFrame.setVisible(true);
frClientFrame。
setState(JFrame。
NORMAL);
}
});
miExit。
addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
windowClosing(null);
}
});
//不知何用
icon。
addActionListener(miRevert.getActionListeners()[0]);
}
}
publicvoidwindowClosing(WindowEvente){
intresult=MessageBox。
showConfirmMessage(”您确定要退出聊天系统吗?
”);
if(result==JOptionPane.YES_OPTION){
frClientFrame。
disconnect();
frClientFrame。
setVisible(false);
frClientFrame。
dispose();
//System.exit(0);
}else{
//donothing
}
}
}
packageTCP_chat_room。
gui;
importjava。
awt.Color;
publicclassClientFrameextendsJFrame{
privatebooleanconnected=false;
privateintport;
privateStringhost;
privateSockets;
privateDataInputStreamdis;
privateDataOutputStreamdos;
publicDataInputStreamgetDis(){
returndis;
}
publicDataOutputStreamgetDos(){
returndos;
}
privatefinalJPanelpanel=newJPanel();
privatefinalJPanelpnlChatArea=newJPanel();
privatefinalImageIconimageSetting=ImageManager。
getIcon("setting。
gif");
privatefinalJLabellblSettingImage=newJLabel(imageSetting);
privatefinalJPanelpnlSetting=newJPanel();
privatefinalJPanelpnlInputArea=newJPanel();
privatefinalJButtonbnClose=newJButton("关闭”);
privatefinalJButtonbnSend=newJButton(”发送");
privatefinalJTextAreatxtChatArea=newJTextArea(6,15);
privatefinalJTextAreatxtInputArea=newJTextArea(2,15);
privatefinalDimensionminDimension=newDimension(300,413);
publicbooleanisConnected(){
returnconnected;
}
publicvoidsetConnected(booleanconnected){
this。
connected=connected;
}
publicJTextAreagetTxtChatArea(){
returntxtChatArea;
}
publicJTextAreagetTxtInputArea(){
returntxtInputArea;
}
publicClientFrame(Stringhost,intport)throwsIOException{
this。
host=host;
this。
port=port;
s=newSocket(host,port);
dos=newDataOutputStream(s.getOutputStream());
dis=newDataInputStream(s.getInputStream());
initComponents();
}
privatevoidinitComponents(){
this.setTitle("大家聊天室”);
this.setSize(minDimension);
this。
setDefaultCloseOperation(JFrame。
DO_NOTHING_ON_CLOSE);
getContentPane().setLayout(null);
panel。
setBounds(0,0,292,379);
getContentPane()。
setBackground(Color。
LIGHT_GRAY);
getContentPane()。
add(panel);
panel。
setLayout(null);
pnlChatArea.setBounds(0,0,292,226);
JScrollPanejspChatArea=newJScrollPane(txtChatArea);
jspChatArea.setAutoscrolls(false);
pnlChatArea。
add(jspChatArea);
panel.add(pnlChatArea);
pnlChatArea。
setLayout(null);
txtChatArea。
setLineWrap(true);
txtChatArea.setEditable(false);
//pnlChatArea。
setBounds(10,10,272,206);
jspChatArea.setBounds(10,10,272,206);
pnlSetting.setBounds(0,235,292,45);
pnlSetting。
add(lblSettingImage);
panel。
add(pnlSetting);
pnlInputArea。
setBounds(0,279,292,67);
JScrollPanejspInputArea=newJScrollPane(txtInputArea);
pnlInputArea.add(jspInputArea);
panel.add(pnlInputArea);
pnlInputArea.setLayout(null);
txtInputArea。
setLineWrap(true);
//pnlInputArea。
setBounds(10,10,272,47);
jspInputArea。
setBounds(10,10,272,47);
bnClose.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
//按下关闭按钮则直接退出聊天室
exitSystem();
}
});
bnClose。
setBounds(99,356,74,23);
panel。
add(bnClose);
bnSend。
addActionListener(newSendActionListener(this));
bnSend.setBounds(197,356,74,23);
bnSend.setMnemonic(0);
panel.add(bnSend);
this。
setMinimumSize(minDimension);
this.addWindowListener(newClientFrameAction(this));
//this。
getRootPane().setDefaultButton(bnSend);
}
publicbooleanlogin(Stringnickname){
try{
dos。
writeUTF(”login_”+nickname);
intloginResult=dis.readInt();
if(loginResult==1){
System。
out。
println("登陆成功,欢迎进入聊天室!
");
returntrue;
}elseif(loginResult==-1){
System。
out。
println("登陆失败,没有以login_开头”);
returnfalse;
}elseif(loginResult==2){
System.out。
println(”登陆失败,用户昵称已经存在!
”);
returnfalse;
}
}catch(IOExceptione){
e.printStackTrace();
}
returnfalse;
}
privateclassSendActionListenerimplementsActionListener{
privateClientFramefrClientFrame;
publicSendActionListener(ClientFramefrClientFrame){
this。
frClientFrame=frClientFrame;
}
publicvoidactionPerformed(ActionEvente){
Stringsaying=frClientFrame.getTxtInputArea()。
getText();
//System。
out.println(saying);
frClientFrame.getTxtInputArea().setText(null);
try{
frClientFrame.getDos().writeUTF(saying);
frClientFrame.getDos()。
flush();
}catch(IOExceptione1){
e1.printStackTrace();
}
}
}
publicvoidexitSystem(){
newClientFrameAction(this).windowClosing(null);
}
publicvoiddisconnect(){
try{
this.setConnected(false);
dos。
close();
dis.close();
s.close();
}catch(IOExceptione3){
e3。
printStackTrace();
}
}
publicvoidreceiveMessage(){
newThread(newThreadreceiveMessage(this)).start();
}
privateclassThreadreceiveMessageimplementsRunnable{
privateClientFramefrClientFrame;
publicThreadreceiveMessage(ClientFramefrClientFrame){
this。
frClientFrame=frClientFrame;
}
Stringmessage=”";
publicvoidrun(){
try{
while(isConnected()){
message=dis.readUTF();
System.out.println(message);
frClientFrame。
txtChatArea.append(message+"\n");
Thread.sleep(100);
}
}catch(IOExceptione){
e.printStackTrace();
}catch(InterruptedExceptione){
Thread。
interrupted();
}
}
}
}
packageTCP_chat_room.gui;
importjavax.swing。
JOptionPa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 计算机网络 TCP 聊天室 实验 报告