完整计算机网络TCP聊天室实验报告.docx

上传人:b****6 文档编号:7533412 上传时间:2023-01-24 格式:DOCX 页数:21 大小:130.06KB
下载 相关 举报
完整计算机网络TCP聊天室实验报告.docx_第1页
第1页 / 共21页
完整计算机网络TCP聊天室实验报告.docx_第2页
第2页 / 共21页
完整计算机网络TCP聊天室实验报告.docx_第3页
第3页 / 共21页
完整计算机网络TCP聊天室实验报告.docx_第4页
第4页 / 共21页
完整计算机网络TCP聊天室实验报告.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

完整计算机网络TCP聊天室实验报告.docx

《完整计算机网络TCP聊天室实验报告.docx》由会员分享,可在线阅读,更多相关《完整计算机网络TCP聊天室实验报告.docx(21页珍藏版)》请在冰豆网上搜索。

完整计算机网络TCP聊天室实验报告.docx

完整计算机网络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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1