ht[i]=newSaiDao(hm,i+1,this);
}
}
publicstaticvoidmain(String[]args){
newMamain();
}
publicvoidactionPerformed(ActionEvente){//开始按钮事件服务,首轮赛马
.
.
.
}
int[]getRND(){
.
.
.
}
publicvoidfocusGained(FocusEvente){
if(e.getSource().equals(jtf))
{
jtf.setText("");
}
}
publicvoidfocusLost(FocusEvente){
}
}
●运行结果
●算法分析
三、实验小结
四、教师评语及成绩
实验项目十七网络编程
一、实验目的及要求
1、了解TCP通信类及应用
2、了解UDP类及应用
3、打造网络聊天室
二、实验内容和要求
1、了解TCP通信类及应用
//p251,例14-1
importjava.awt.*;
importjava.applet.*;
importjava.util.*;
import.*;
publicclassFwangluoextendsApplet{
InetAddressHostaddr=null;
publicvoidstart(){
try{
Hostaddr=______________________;
}catch(UnknownHostExceptione){
System.out.println(_________________);
}
repaint();
}
publicvoidpaint(Graphicsg){
g.drawString("Hostname/IP:
"+Hostaddr.toString(),10,30);
}
}
●运行结果
●算法分析
2、了解UDP类及应用(见网络聊天室)
●运行结果
●算法分析
3、打造网络聊天室
//聊天室,网络编程,用Server.java+Client.java+Login.java3个文件完成
//服务器端文件名Server.java
(这个文件放到老师的主机上,同学们可以不管)
import.*;
importjava.io.*;
importjava.util.*;
importjava.awt.event.*;
importjava.awt.*;
importjavax.swing.*;
classServerextendsJFrame{
privateTextAreamsgA=newTextArea();//服务器用来输入的文本域
privateTextAreaarea=newTextArea();//服务器显示消息的文本域
privatejava.awt.Listlist=newjava.awt.List();//在线客户列表
privateServerSocketserver;//服务器
privateSocketclient;//客户端
privateMapcontainer=newHashMap();//HashMap
voidinit(){
//设置几个面板
Panelp1=newPanel();
Panelp2=newPanel();
Panelp3=newPanel();
Panelp4=newPanel();
Panelp5=newPanel();
Panelp6=newPanel();
Panelp7=newPanel();
//设置两个主要的文本框
BorderLayoutborder1=newBorderLayout();
p1.setLayout(border1);
p1.add(BorderLayout.CENTER,area);
BorderLayoutborder2=newBorderLayout();
p3.setLayout(border2);
p3.add(BorderLayout.NORTH,p2);
p3.add(BorderLayout.CENTER,msgA);
BorderLayoutborder3=newBorderLayout();
p4.setLayout(border3);
p4.add(BorderLayout.CENTER,p1);
p4.add(BorderLayout.SOUTH,p3);
JButtonstartButton=newJButton("启动服务");
JButtonsendButton=newJButton("发送");
JButtonflushButton=newJButton("刷新列表");
FlowLayoutfl=newFlowLayout(FlowLayout.LEFT);
p5.setLayout(fl);
p5.add(startButton);
p5.add(sendButton);
p5.add(flushButton);
BorderLayoutborder4=newBorderLayout();
p6.setLayout(border4);
p6.add(BorderLayout.CENTER,p4);
p6.add(BorderLayout.SOUTH,p5);
p7.setLayout(newBorderLayout());
Labellb3=newLabel("在线用户");
p7.add(lb3,BorderLayout.NORTH);
p7.add(list,BorderLayout.CENTER);
area.setEditable(false);
BorderLayoutborder=newBorderLayout();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(border);
this.add(BorderLayout.CENTER,p6);
this.add(BorderLayout.EAST,p7);
this.setTitle("聊天服务器");
this.setBounds(100,100,600,550);
this.setVisible(true);
//"启动服务"按钮监听器
startButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
Threadt=newStart();
t.start();
}
});
//发送按钮监听器
sendButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
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("");
}
}
});
//刷新按钮监听器
flushButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
if(list!
=null){
list.removeAll();//清空在线用户列表,以便刷新
}
Set>mySet=container.entrySet();
for(Iterator>it=mySet.iterator();it.hasNext();){//刷新列表
Map.Entryme=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();
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("");
}
}
});
}
classStartextendsThread//启动服务器的线程
{
publicvoidrun(){
try{
if(server!
=null&&!
server.isClosed()){
area.append("警告!
服务器已在启动中!
\n");
}
else{
server=newServerSocket(2009);//启动服务器
area.append((newDate()).toString()+'\n'+"恭喜!
"+"服务器启动成功!
"+"\n\n");
}
while(true){
client=server.accept();
ThreadsgS=newSgService(client);//为每位登录的客户创建一个线程
sgS.start();//启动客户线程
}
}
catch(Exceptione){
e.printStackTrace();
}
}
}
//处理单个客户的线程
classSgServiceextendsThread
{
privateSocketclient=null;//客户套接字
privateBufferedReaderbr=null;//输入流
privatePrintStreamps=null;
privateintcounter=0;//记录是第几次接受用户的信息
privateStringname=null;
SgService(Socketclient){//构造方法
this.client=client;
}
publicvoidrun(){
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.MINUTE);
intss=ca.get(Calendar.SECOND);
Stringtime=hh+":
"+mm+":
"+ss+"";
broad