网络SOCKET编程报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

XX大学实验报告年月日课题名称:计算机网络实验名称:SOCKET编程实现聊天程序班级:姓名:同组人:指导老师评定:签名:一、实验目的1、掌握网络应用程序的开发方法;2、掌握Client/Server结构软件的设计与开发方法;3、掌握Socket机制的工作原理;4、会利用编程的方法实现Socket的工作机制,实现聊天程序。二、实验前的准备1、阅读教材关于TCP/IP协议和Socket的相关内容;2、阅读WinSock编程指南;3、阅读本实验所附内容;4、熟悉Eclipse开发工具。三、实验内容使用Win32Socket函数实现聊天程序:能相互对发文本消息。四、实验步骤和实验源程序实验步骤:1、打开java设计软件Elipse,分别建立两个新工程,取名为TalkProject;2、在刚建立的工程下建里两个类ChatServer和ChatClient;3、在两个类下分别编写源程序,利用Socket实现聊天软件;4、运行服务器程序后,再运行客户端程序,就可以实现聊天了。实验源代码:ChatServer:importjava.io.*;importjava.net.*;importjava.util.*;publicclassChatServer{booleanstarted=false;ServerSocketss=null;ListClientclients=Collections.synchronizedList(newArrayListClient());//ListClientclients=Collections.synchronized(newArrayListClient());//clients是共享变量,通过Collections.synchronized(…)做同步化处理publicstaticvoidmain(String[]args){newChatServer().start();}publicvoidstart(){try{ss=newServerSocket(8888);//创建一个监听Socket对象started=true;}catch(IOExceptione){e.printStackTrace();}try{while(started){Sockets=ss.accept();//等待客户端发起连接Clientc=newClient(s);System.out.println(aclientconnected!);newThread(c).start();//启动线程clients.add(c);//向共享变量中添加}ss.close();//关闭Socket}catch(IOExceptione){e.printStackTrace();}}classClientimplementsRunnable{//实现Runnable接口privateSockets;privateDataInputStreamdis=null;privateDataOutputStreamdos=null;privatebooleanConnected=false;publicClient(Sockets){this.s=s;try{dis=newDataInputStream(s.getInputStream());//创建输入流dos=newDataOutputStream(s.getOutputStream());//创建输出流Connected=true;}catch(IOExceptione){e.printStackTrace();}}publicvoidsend(Stringstr){try{dos.writeUTF(str);//向输入流中写入数据}catch(IOExceptione){clients.remove(this);//出错时(客户可能已断线),移除一个客户端}}publicvoidrun(){try{while(Connected){Stringstr=dis.readUTF();//从输出流中读取数据synchronized(clients){//对共享的列表进行遍历时必须要同步化IteratorClientit=clients.iterator();//返回一个迭代器while(it.hasNext()){Clientc=it.next();c.send(str);//将数据发送出去}//while}//synchronized}//while(Connected)dis.close();//关闭输入流dos.close();//关闭输出流s.close();//关闭Socket}catch(Exceptione){System.out.println(Clientclosed!);}finally{clients.remove(this);//确保线程结束时从共享变量中删除自己(比如从客户机读数据时出错,//客户机可能已掉线,线程会结束)}//try}//run}}ChatClient:importjava.awt.*;importjava.awt.event.*;importjava.io.*;importjava.net.*;importjavax.swing.Icon;importjavax.swing.ImageIcon;importjavax.swing.JButton;publicclassChatClientextendsFrame{Sockets=null;DataOutputStreamdos=null;DataInputStreamdis=null;privatebooleanConnected=false;TextFieldtf=newTextField();TextAreata1=newTextArea();TextAreata2=newTextArea();Buttonbt1=newButton(发送);Threadthread=newThread(newClientThread());//创建线程publicstaticvoidmain(String[]args){newChatClient().call();}publicvoidcall(){bt1.setBackground(Color.cyan);setLocation(400,300);setSize(400,300);setLayout(null);//取消布局管理器setBackground(Color.cyan);tf.setBounds(250,40,70,25);ta1.setBounds(30,40,200,80);ta2.setBounds(30,140,200,80);bt1.setBounds(265,250,70,30);tf.setBounds(30,240,200,35);tf.addActionListener(newMyListener());//注册事件监听器add(tf);add(bt1);add(ta1);add(ta2);add(tf);this.addWindowListener(newWindowAdapter(){//关闭窗口publicvoidwindowClosing(WindowEvente){disconnect();System.exit(0);}});bt1.addActionListener(newMyListener());//注册事件监听器setVisible(true);connect();thread.start();//启动线程}publicvoidconnect(){try{s=newSocket(127.0.0.1,8888);dos=newDataOutputStream(s.getOutputStream());//返回一个输出流dis=newDataInputStream(s.getInputStream());//返回一个输入流System.out.println(connected!);Connected=true;}catch(Exceptione){e.printStackTrace();}}publicvoiddisconnect(){try{dos.close();//关闭输出流dis.close();//关闭输入流s.close();//关闭Socket}catch(IOExceptione){e.printStackTrace();}}privateclassMyListenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){Stringstr=tf.getText().trim();//获取文本框中的数据tf.setText();ta2.append(str+\n);//将文本框中的数据添加到文本区中try{dos.writeUTF(str);//向输出流中写入数据dos.flush();//刷空流}catch(IOExceptione1){e1.printStackTrace();}}}privateclassClientThreadimplementsRunnable{publicvoidrun(){try{while(Connected){Stringstr=dis.readUTF();//从输出流中读取数据ta1.append(str+\n);}}catch(Exceptione){e.printStackTrace();}}}}六、实验小结。

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功