Java网络编程实践报告Word下载.docx

上传人:b****5 文档编号:21014005 上传时间:2023-01-26 格式:DOCX 页数:23 大小:86.08KB
下载 相关 举报
Java网络编程实践报告Word下载.docx_第1页
第1页 / 共23页
Java网络编程实践报告Word下载.docx_第2页
第2页 / 共23页
Java网络编程实践报告Word下载.docx_第3页
第3页 / 共23页
Java网络编程实践报告Word下载.docx_第4页
第4页 / 共23页
Java网络编程实践报告Word下载.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

Java网络编程实践报告Word下载.docx

《Java网络编程实践报告Word下载.docx》由会员分享,可在线阅读,更多相关《Java网络编程实践报告Word下载.docx(23页珍藏版)》请在冰豆网上搜索。

Java网络编程实践报告Word下载.docx

类名:

Server

作用:

服务器的启动

继承的类:

JFrame,构造服务器界面。

定义的对象:

TextArea文本域

Java.awt.List在线客户列表

SeverSocket服务器

Socket客户端

主要成员方法:

voidinit()构造服务器端的界面

publicvoidactionPerformed(ActionEvente)按钮监听器

publicvoidkeyPressed(KeyEvente)键盘监听器

start

启动服务器的线程

继承的类名:

thread

主要的成员方法:

Publicvoidrun()启动服务器的线程

SgService

publicvoidrun()处理单个客户的线程

2)用户登录相关的类:

login

构造登录界面

JFrame

实现的接口:

ActionListener

构造方法:

publiclogin()

publicvoidactionPerformed(ActionEvente)实现登录和取消按钮的监听器

loginStart

主要的方法:

publicvoidrun()

如果登录成功,则弹出客户端聊天窗口,如果登录失败,则打印出登录失败,以告知客户

3)客户端相关的类:

Client

publicClient(PrintStreamout,BufferedReaderin,Stringname)

publicvoidreceive()接受服务端发来的信息

五.主要程序源代码

//聊天室服务器

importjavax.swing.*;

classServerextendsJFrame{

privateTextAreamsgA=newTextArea();

//服务器用来输入用的文本域

privateTextAreaarea=newTextArea();

//服务器显示消息的文本域

privateTextFieldportT=newTextField("

8888"

);

privatejava.awt.Listlist=newjava.awt.List();

//在线客户列表

privateServerSocketserver;

//服务器

privateSocketclient;

//客户端

privateMap<

String,Socket>

container=newHashMap<

();

//HashMap

voidinit(){

Panelp1=newPanel();

Panelp2=newPanel();

Panelp3=newPanel();

Panelp4=newPanel();

Panelp5=newPanel();

Panelp6=newPanel();

Panelp7=newPanel();

Panelp8=newPanel();

Panelp9=newPanel();

Panelp10=newPanel();

//设置两个重要的文本框

Labellb1=newLabel("

服务器界面"

lb1.setBackground(newColor(250,120,150));

Labellb2=newLabel("

port"

BorderLayoutborder1=newBorderLayout();

p1.setLayout(border1);

p1.add(BorderLayout.CENTER,area);

BorderLayoutborder2=newBorderLayout();

p5.setLayout(border2);

p5.add(BorderLayout.NORTH,p3);

p5.add(BorderLayout.CENTER,msgA);

BorderLayoutborder3=newBorderLayout();

p7.setLayout(border3);

p7.add(BorderLayout.CENTER,p1);

p7.add(BorderLayout.SOUTH,p5);

p7.setBackground(newColor(250,150,200));

JButtonstartButton=newJButton("

启动服务"

JButtonsendButton=newJButton("

发送"

JButtonflushButton=newJButton("

刷新列表"

FlowLayoutf1=newFlowLayout(FlowLayout.LEFT);

p8.setLayout(f1);

p8.add(lb2);

p8.add(portT);

p8.add(startButton);

p8.add(sendButton);

p8.add(flushButton);

p8.setBackground(newColor(250,120,150));

BorderLayoutborder4=newBorderLayout();

p9.setLayout(border4);

p9.add(BorderLayout.CENTER,p7);

p9.add(BorderLayout.SOUTH,p8);

p10.setLayout(newBorderLayout());

Labellb3=newLabel("

在线用户"

lb3.setBackground(newColor(250,120,150));

p10.add(lb3,BorderLayout.NORTH);

p10.add(list,BorderLayout.CENTER);

area.setEditable(false);

BorderLayoutborder=newBorderLayout();

this.addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEventarg0){

System.exit(0);

}

});

this.setLayout(border);

this.add(BorderLayout.NORTH,lb1);

this.add(BorderLayout.CENTER,p9);

this.setTitle("

聊天服务器"

this.setBounds(100,100,600,550);

this.setVisible(true);

//“启动服务”按钮监听器

startButton.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

Threadt=newStart();

t.start();

//启动服务按钮监听器

//发送按钮监听器

sendButton.addActionListener(newActionListener(){

Stringmsg=msgA.getText();

if(msg!

=null&

&

msg!

="

"

){//如果消息不为空

Calendarca=newGregorianCalendar();

inthh=ca.get(Calendar.HOUR_OF_DAY);

intmm=ca.get(Calendar.MINUTE);

intss=ca.get(Calendar.SECOND);

Stringtime=newString(hh+"

:

+mm+"

+ss+"

broadcast(time+"

[系统消息]:

+msg);

//那么广播这条消息

area.append(time+"

+msg+"

\n"

msgA.setText("

}

//end

//刷新按钮监听器

flushButton.addActionListener(newActionListener(){

if(list!

=null){

list.removeAll();

//清空在线用户列表,以便刷新

Set<

Map.Entry<

>

mySet=container.entrySet();

for(Iterator<

it=mySet.iterator();

it.hasNext();

){//刷新列表

Map.Entry<

me=it.next();

StringaClientName=me.getKey();

SocketaClient=me.getValue();

StringaClientAddress=aClient.getInetAddress().getHostAddress();

list.add(aClientName+"

---"

+aClientAddress);

msgA.addKeyListener(newKeyAdapter(){//从键盘监听器---按下Enter发送消息

publicvoidkeyPressed(KeyEvente){

intvalue=e.getKeyCode();

if(value==KeyEvent.VK_ENTER){

Stringmsg=msgA.getText();

}

classStartextendsThread//启动服务器的线程

{

publicvoidrun(){

try{

if(server!

!

server.isClosed()){

area.append("

警告!

服务器已在启动中!

else{

server=newServerSocket(Integer.parseInt(portT.getText()));

//启动服务器

area.append((newDate()).toString()+"

+"

[恭喜!

(*^__^*)嘻嘻……]"

服务器启动成功!

\n\n"

);

while(true){

client=server.accept();

ThreadsgS=newSgService(client);

//为每位登录的客户创建一个线程

sgS.start();

//启动客户线程

catch(Exceptione){

System.out.println("

cuowu1"

e.printStackTrace();

}

//处理单个客户的线程

classSgServiceextendsThread

privateSocketclient=null;

//客户套接字

privateBufferedReaderbr=null;

//输入流

privatePrintStreamps=null;

privateintcounter=0;

//记录是第几次接受用户的信息

privateintmark=0;

//记录用户说不文明用语的次数

privateStringname=null;

SgService(Socketclient){//构造方法

this.client=client;

publicvoidrun(){//run---begin

try{

br=newBufferedReader(newInputStreamReader(client.getInputStream()));

ps=newPrintStream(client.getOutputStream());

Stringmsg=null;

while((msg=br.readLine())!

=null){//无限循环意味着可以和用户进行无限次交互

if(counter==0){

name=msg;

container.put(name,client);

list.add(name+"

+client.getInetAddress().getHostAddress());

Calendarca=newGregorianCalendar();

inthh=ca.get(Calendar.HOUR_OF_DAY);

intmm=ca.get(Calendar.SECOND);

Stringtime=hh+"

;

broadcast(time+name+"

上线了!

counter++;

}

else{

if(msg.equals("

你是个笨蛋"

)){

mark=mark+1;

if(mark<

3){

Calendarca=newGregorianCalendar();

inthh=ca.get(Calendar.HOUR_OF_DAY);

intmm=ca.get(Calendar.MINUTE);

intss=ca.get(Calendar.SECOND);

Stringtime=newString(hh+"

singleCom(time+"

警告,请注意文明用语!

client);

area.append(time+"

+name+"

第"

+mark+"

次使用了不文明用语,特此警告!

}

else{//如果客户第三次说不文明的话,系统就把他踢出聊天室

if(mark==3){

singleCom(time+"

由于多次使用了不文明用语,经警告无效,现已被踢出聊天室!

//告诉他本人

}

removeClient(name,client);

//从系统列表中删除这个人的信息

//并向所有人广播这一消息

broadcast(time+"

area.append(time+name+"

说"

//同时向每个在线客户广播这则消息

catch(Exceptionex){

Calendarca=newGregorianCalendar();

inthh=ca.get(Calendar.HOUR_OF_DAY);

intmm=ca.get(Calendar.MINUTE);

intss=ca.get(Calendar.SECOND);

Stringtime=newString(hh+"

area.append(time+name+"

下线了!

broadcast(time+name+"

list.remove(name+"

container.remove(name);

voidremoveClient(Stringname,Socketclient){

list.remove(name+"

container.remove(name);

voidbroadcast(Stringmsg){//broadcast---begin

Set<

Iterator<

Stringmessage=msg;

while(it.hasNext()){//如果列表中还有客户

SockettempClient=me.getValue();

singleCom(message,tempClient);

//就把消息发给这个客户

//向单个客户发送消息

privatevoidsingleCom(Stringmsg,SocketaClient){//singleCommunition---begin

PrintStreampw=newPrintStream(aClient.getOutputStream());

Stringmessage=msg;

pw.println(msg);

}catch(Exceptionex){

ex.printStackTrace();

publicstaticvoidmain(String[]args){

newServer().init

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

当前位置:首页 > 高等教育 > 工学

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

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