问题描述:
目 录
1 前言 ................................................ 3
1.1 实习背景 ..................................................... 3 1.2
实习环境 ..................................................... 3 2 实习内容 ............................................ 4
2.1 实习过程 ..................................................... 4 2.2 实习内容 ..................................................... 4 2.3
主要成果 .................................................... 18 3 总结 ............................................... 22
3.1 实习体会 .................................................... 22 3.2
其它意见 .................................................... 22 学生实习鉴定 ............................................ 23
第 1 页
1 前言
1.1 实习背景
科技的高度发展,使得如今的我们不得不掌握一门很有前景的技术,计算机在人们生活学习等等方面起的作用越来越突出,作为一名和IT 密不可分的学电子信息工程专业的学生,我们应该提高自己的实际动手能力,促进基业,学校给我们组织了这次充满着深刻意思的达内生产实习。学习Java 程序设计语言。除了课堂讲授以外,必须有不少于课堂讲授时的上机时间,是我们尽快掌握用Java 语言开发编程的能力,为今后的继续学习,工作打了一个良好的基础。
1.2 实习环境
达内科技为学生提供商业软件公司真实的软件开发环境,包括开发服务器、Unix/Linux操作系统、Myeclipse6.0开发环境及详细的项目技术文档及相关开发环境,保证学生的项目实践的顺利进行。
2 实习内容
2.1 实习过程
在windows 操作系统下,使用Eclipse 开发工具,使用Java 语言进行支持跨平台对QQ 聊天室的软件开发。
第 2 页
6月25日: 开学典礼,练习操作系统windows 下,在Java 中HelloWorld 编写
6月26日: 讲述输入数据、循环控制及随机数的产生 讲述流程控制、面向对象知识
6月27日: 讲述字符串的输出及长度统计、八类数据类型、数据之间的转化以及标识符
的命名规则
6月28日: 讲述构造函数new 、类的封装、Java 的访问权限、线程及线程的五种状
态、实现方法、启动方法
6月29日: 讲述字节流、字符流及网络编程的服务器端编程步骤、客户端的编程步骤
6月30日: 讲述Socket 编程、下午启动QQ 聊天室
7月02日: 上午继续练习QQ 聊天室的相关知识,下午学习Swing
7月03日: 开始做即时通信项目
7月04日: 去达内本部进行模拟面试
7月05日: 上午学生做项目并处理所遇到的问题,下午评审项目
7月06日: 毕业典礼
2.2 实习内容
我们这次生产实习主要做的是即时系统,主要有服务器端、客户端,相应程序如下:
//服务器端程序
public class Server {
//存放当前在线用户--名字
List users =new ArrayList();
//存放当前在线的连接--socket
List sockets =new ArrayList();
Map userAdress =new HashMap();
//服务器端ServerSocket 对象
ServerSocket serverSocket ;
int port =1212;
JFrame jf =new JFrame("QQ 服务器" );
JTextArea jta1=new JTextArea(2,15);
JTextArea jta2;
public void startServer(){
//初始化服务器端界面
i nitFrame();
//初始化服务器端端口(ServerSocket对象实例化)
i nitSocket();
//启动监听客户端
s tartListener();
}
public void initFrame(){
j f .setLayout(new BorderLayout());
f inal ImageIcon ima=new ImageIcon(Server.class .getResource("ttttt.jpg" )); j ta2=new JTextArea(10,15);
//设置背景图片
J Panel jp=new JPanel();
j p.setLayout(new BorderLayout());
第 6 页
public static void Server server=new Server();
server.startServer();//启动服务器端
}
}
//客户端程序
public class Client implements ActionListener{
JFrame jf =new JFrame(" 西安工业大学电信四班聊吧!!!!" ); //north
JPanel north =new JPanel();
JMenuBar jmb =new JMenuBar();
JMenu connect =new JMenu("connect" );
JMenu about =new JMenu("about" );
JMenuItem jmi1=new JMenuItem(" 连接服务器" );
JMenuItem jmi2=new JMenuItem(" 断开服务器" );
JMenuItem jmi3=new JMenuItem(" 退出" );
JMenuItem jmi4=new JMenuItem(" 关于小组" );
ImageIcon loginImage =
new ImageIcon(
Client.class .getResource("gongda_a.gif")); JLabel jl1=new JLabel(loginImage );
//west
JPanel west =new JPanel();
ImageIcon westImage =new ImageIcon(
Client.class .getResource("ttt.gif" ));
JLabel jl2=new JLabel(westImage );
DefaultListModel dlm =new DefaultListModel(); JList userList =new JList(dlm );
JScrollPane jsp =new JScrollPane(userList );
//center
JPanel center =new JPanel();
JTextArea jta =new JTextArea();
JScrollPane jsp1=new JScrollPane(jta );
JLabel jl3=new JLabel(" 请输入消息:");
JTextField jtf =new JTextField(40);
JButton send =new JButton(" 发送" );
Socket s ;
ObjectOutputStream oos ;
String userName =" 游客" ;
String toName ;
Message msg ;
JTextArea jta1=new JTextArea();
JFrame jf2;
JTextArea jta2=new JTextArea();
JScrollPane jsp2=new JScrollPane(jta2);
public void startClient(){
//初始化界面
i nitFrame();
//添加监听事件
a ddListener();
}
public void initFrame(){
j f .setLayout(new BorderLayout());
//给north 添加组件
c onnect .add(jmi1);
c onnect .add(jmi2);
c onnect .add(jmi3);
a bout .add(jmi4);
j mb .add(connect );
第 7 页
j mb about n orth .setLayout(new BorderLayout());
n orth .add(jmb ,BorderLayout. NORTH );
n orth .add(jl1,BorderLayout. CENTER );
j f .add(north ,BorderLayout. NORTH );
//给west 添加组件
w est .setLayout(new BorderLayout());
w est .add(jl2,BorderLayout. NORTH );
u serList .setBackground(Color.cyan );
j sp .setSize(150,300);
u serList .setFixedCellWidth(150);
u serList .setFont(new Font(" 黑体" ,Font. BOLD ,20));
w est .add(jsp ,BorderLayout. CENTER );
j f .add(west ,BorderLayout. WEST );
//给center 添加组件
c enter .setLayout(new BorderLayout());
c enter .add(jsp1,BorderLayout. CENTER );
j ta .setBackground(Color.white );
j ta .setEditable(false );
j ta .setFont(new Font(" 黑体" ,Font. BOLD ,20));
J Panel jp=new JPanel();
j p.setLayout(new FlowLayout());
//两种不同方式给输入框添加回车监听
j tf .setActionCommand("enterKey" );
jp.add(jl3);
j p.add(jtf );
j p.add(send );
c enter .add(jp,BorderLayout.SOUTH );
j f .add(center ,BorderLayout. CENTER );
j f .setIconImage(new
ImageIcon(Client.class .getResource("QQ_2.gif")).getImage()); j f .setSize(800,650);
j f .setLocation(200,100);
j f .setVisible(true );
j f .setResizable(false );
//给窗口红叉按钮从新添加监听事件
j f .setDefaultCloseOperation(
jf . DO_NOTHING_ON_CLOSE);
j f .addWindowListener(new WindowListener(){
@Override
public void windowActivated(WindowEvent e) { // TODO Auto-generated method stub
}
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent e) {
if (oos ==null ){
System. exit (0);
}
Message msg=new Message();
msg.setType("loginOut" );
msg.setSendTime(new Date());
msg.setFromName(userName );
try {
oos .writeObject(msg);
oos .flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
第 8 页
}
System. exit (0);
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
});
}
public void addListener(){
//给发送按钮添加监听
s end .addActionListener(this );
//连接服务器添加监听
j mi1.addActionListener(this );
j mi2.addActionListener(this );
j mi3.addActionListener(this );
j mi4.addActionListener(this );
j tf .addActionListener(this );
u serList .addMouseListener(new MouseListener(){
JFrame jf1=new JFrame();
JTextField jtf =new JTextField(10);
JButton jb1=new JButton(" 私聊发送" );
JButton jb2=new JButton(" 私聊关闭" );
Message msg1=new Message();
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() ==2) {
int index = userList .locationToIndex(e.getPoint()); toName =(String)(msg .getUserList()).get(index);
System.out .println("Double clicked on Item " + msg .getUserList().get(index));
JOptionPane.showMessageDialog (jf , toName );
msg1.setToName(toName );
jf1.setTitle(" 与" +toName +" 会话中(主叫)" );
msg1.setType("personal" );
msg1.setSendTime(new Date());
msg1.setFromName(userName );
try {
oos .writeObject(msg1);
oos .flush();
} catch (IOException e1) {
JScrollPane jsp=new JScrollPane(jta1);
JPanel jp=new JPanel();
jb1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) { Message msg1=new Message();
msg1.setMessage(jtf .getText());
第 9 页 jtf ""
msg1.setToName(toName );
msg1.setFromName(userName );
msg1.setSendTime(new Date());
msg1.setType("personalSend" );
try {
oos .writeObject(msg1);
oos .flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
jb2.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
jf1.dispose();
Message msg1=new Message();
msg1.setFromName(userName );
msg1.setSendTime(new Date());
msg1.setMessage(userName +" 离线了!" );
msg1.setType("personalSend" );
try {
oos .writeObject(msg1);
oos .flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
jp.add(jtf );
jp.add(jb1);
jp.add(jb2);
jf1.add(jsp,BorderLayout.CENTER );
jf1.add(jp,BorderLayout.SOUTH );
jf1.setSize(500,400);
jf1.setLocation(100,300);
jf1.setVisible(true );
jf1.setResizable(false );
jf1.setDefaultCloseOperation(jf1. DO_NOTHING_ON_CLOSE);
jf1.addWindowListener(new WindowListener(){
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent e) {
System. out .println("hhhhhh" );
jf1.dispose();
}
@Override
public void windowDeactivated(WindowEvent e) { }
第 10 页
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
});
}
}
@Override
public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub
}
});
}
@Override
public void actionPerformed(ActionEvent e){
S tring com=e.getActionCommand();
i f (" 发送" .equals(com)||"enterKey" .equals(com)){ msg =new Message();
msg .setFromName(userName );
msg .setSendTime(new Date());
msg .setMessage(jtf .getText());
msg .setType("send" );
try {
oos .writeObject(msg );
oos .flush();
jtf .setText("" );
} catch (IOException e1) {
第 11 页
// TODO Auto-generated catch block e1.printStackTrace();
}
System. out .println(" 你的操作是:" +com);
}else if (" 连接服务器" .equals(com)){
int count=0;
do {
if (count>=2){
JOptionPane.showMessageDialog (
jf , " 鄙视你" );
break ;
}
String ip=JOptionPane.
showInputDialog (" 请输入服务器端IP:");
int port=Integer.parseInt (
JOptionPane. showInputDialog (" 请输入服务器端口号:" )); try {
s =new Socket(ip,port);//连接服务器
} catch (UnknownHostException e1) {
count++;
JOptionPane. showMessageDialog (
jf , " 你输入的IP 地址不对!" );
e1.printStackTrace();
} catch (IOException e1) {
count++;
JOptionPane. showMessageDialog (jf , " 你输入的端口号不对" ); e1.printStackTrace();
}
}while (s ==null );
if (count<2){
String name=JOptionPane.
showInputDialog (" 请输入用户名" );
userName =name;
msg =new Message();
msg .setFromName(name);
msg .setType("login" );
msg .setSendTime(new Date());
//msg.setToName();
try {
oos =new ObjectOutputStream(
s .getOutputStream());
oos .writeObject(msg ); //发送给服务器消息
oos .flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//接收服务器端信息
new Thread(){
J TextField jtf2=new JTextField(10);
Message msg2=new Message();
public void run(){
while (true ){
try {
ObjectInputStream ois;
ois=new ObjectInputStream(
s .getInputStream());
msg =(Message)ois.readObject();
String type=msg .getType();
第 13 页
}
}
});
jb4.addActionListener(new ActionListener(){
@Override
public void actionPerformed(
ActionEvent e) {
jf2.dispose();
msg2.setType("personalSend" ); msg2.setToName(toName );
msg2.setFromName(userName );
msg2.setSendTime(new Date()); try {
oos .writeObject(msg2);
oos .flush();
} catch (IOException e1) {
// TODO Auto-generated catch block e1.printStackTrace();
}
}
});
jp.add(jtf2);
jp.add(jb3);
jp.add(jb4);
jf2.add(jsp2,BorderLayout. CENTER );
jf2.add(jp,BorderLayout.SOUTH );
jf2.setSize(500,400);
jf2.setLocation(400,300);
jf2.setVisible(true );
jf2.setResizable(false );
jf2.setDefaultCloseOperation(jf2. DO_NOTHING_ON_CLOSE);
jf2.addWindowListener(new WindowListener(){
@Override
public void windowActivated(WindowEvent e) { // TODO Auto-generated method stub }
@Override
public void windowClosed(WindowEvent e) { // TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent e) {
jf2.dispose();
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
第 14 页
@Override public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) { // TODO Auto-generated method stub
}
@Override
ublic void windowOpened(WindowEvent e) { // TODO Auto-generated method stub
}
});
/*new Thread(){
{ObjectInputStream ois1;
ois1=new ObjectInputStream(
s.getInputStream());
}
}.start();*/
}
}else if ("personalSend" .equals(type)){
System. out .println(userName +" 被叫消息" );
System. out .println("from" +msg .getFromName()+"to" +msg .getToName());
if (userName .equals(msg .getFromName())||userName .equals(msg .getToName())){
System. out .println(msg .getMessage()+"---" );
if (jf2==null ){
jta1.append(msg .getMessage());
}else {
jta2.append(msg .getMessage());
}
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}.start();
}
}else if (" 断开服务器" .equals(com)){
if (oos !=null ){
msg =new Message();
msg .setType("loginOut" );
第 15 页
msg new msg .setFromName(userName );
try {
oos .writeObject(msg );
oos .flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}else if (" 退出" .equals(com)){
if (oos ==null ){
System. exit (0);
}
msg =new Message();
msg .setType("loginOut" );
msg .setSendTime(new Date());
msg .setFromName(userName );
try {
oos .writeObject(msg );
oos .flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System. exit (0);
System. out .println(" 你的操作是:" +com);
}else if (" 关于小组" .equals(com)){
JOptionPane. showMessageDialog (jf , " 我们是电信四班团队!!!!" ); }
}
public static void main(String[] args) {
Client c=new Client();
//启动程序
c.startClient();
}
}
第 16 页 2.3 主要成果
图1——启动服务器
第 17 页
图二——启动客户端
第 18 页
图三——客户端链接服务器的三个步骤
图四——多人在线
第 19 页
图五——聊天界面
第 20 页
3 总结
3.1 实习体会
从6月25日开始在达内实习,直到7月6号截止,短短的十多天时间,我获益良多,虽然很累,但是我过的很充实,我喜欢这个团体,因为有我认识的新的良师益友,它带给我的收获远不是几个知识点,不是你几个道理那么简单。更多的是团队合作精神,一份工作一个人做需要一天,十个人做可能只是几个小时而已。
达内的第一天充满期望,戴上牌子进行工作,很是兴奋,原本我们认为实习都是打酱油,没想到这个酱油打不了了,那我就踏踏实实干,虽然有点累,任务量很大。在付出了很到的同时我也得到了很大的收获。尤其在做一些基础知识练习的过程中,大家相互讨论,增进友谊,大家的想象力创造力都有提高。对于我们这些即将踏入社会的大学生来说,这是一个很有价值的实习,对于提高自己的职场能力有很大的帮助。
以前我不知道什么是IT 行业,对IT 有很大的向往,但是就是觉得自己和它离的很远,这次达内实习让我知道什么是IT 行业,IT 行业的发展方向是什么,都有了基础的认识。这里的氛围告诉我们在职场上应该做什么该怎么去做,告诉我们做事的方法和方向,更多的是一种潜移默化的影响和引导。这里的氛围让我们体会到实干,积极,行动,习惯,承诺和信用。一直在跟我们讲踏踏实实的讲实干精神。这里带给我的改变是习惯上的。在短短十天的时间内学习并且做出一个项目,每个人的能力和潜力都是逼出来的。这些有利于我们职场习惯的养成,是的,我们就是这样“被逼着不得不”养成新习惯:行动的习惯,总结的习惯,自我教育和学习的习惯。虽然说这些习惯可能离老师们要求和期望的目标还有差距,但是我们已经能在这些良好的职业习惯上体会到它带给我们的改变和收益了。比如说,假如没有这些老师的一再要求和都督,我可能会在大四这个令人烦躁的季节继续浮躁下去。如果没有这次机会,我也就不会认识我们这个团体里面这些优秀的同学和令人骄傲的老师们。
所以我很感激这次机会,感激达内的团队来到了我们学校给我们这次培训。在实训的十天里,我感谢这里的每个同学的竞争,鼓励和支持,这是个真诚热情的团队,我们互相鼓劲,帮助进步;我还要感谢宋老师、王文刚老师、王明刚老师,他们看起来都很普通,但是有如此不同凡响,他们带给我们的影响,不 会轻易地被时间抹掉。
3.2 其它意见
师资力量稍有欠缺,我们小教室的老师对问题解答不到位,对一些问题不能正确做出判断。
学生实习鉴定
兹证明, (大学/学院) (系/学院) 级 专业 同学,从 年 月 日至 年 月 日在 公司的 部门 组进行实习。实习期间,该同学主要从事了以下几个方面的工作:
请您对学生实习工作进行评价(生产实习报告内容的真实性,学生在整个实习期间的工作表现,专业知识水平、自学与动手能力、外语水平、合作与独立工作能力、交流表达能力等)
建议实习成绩: (以优、良、中、及格、不及格五级分计)
指导教师(签字):
评定时间: 年 月 日
问题解答:
我来补答