《计算机网络课程设计报告》学院:计算机科学学院专业:计算机科学与技术班级:08级01班姓名:学号:小组成员:ABCDEF2011-7-13项目内容:基于Socket的网络聊天系统的设计与实现实验目的:基于Socket套接口,实现网络聊天系统的设计与实现,让我们掌握Socket的编程技术及网络服务的技术,让同学们更加深刻的了解,并掌握这方面的知识。
实验环境:操作系统:windows2000或windows2003;内存:256M以上;基于eclipse的JAVA运行环境。
设计方案:首先,我们知道此应用软件需实现网络中多台主机的信息互通,实现语言文字得互聊,因此涉及到主机网络互联的问题,所以必须会应用到网络协议,可以用UDP或TCP。
其次,既然要求设计基于Socket的网络聊天系统,那就必须对Socket有一个充分的了解。
最后,不管运用何种语言设计此程序,都要求对该语言有一个透彻的了解,并能运用自如。
实现流程:启动电脑,打开能运行该程序的环境,必须保证代码的正确性;进行窗体框架的设计,实现网络连接,并达到网络聊天的功能;在以上步骤的成功进行下达到设计要求的基于S o c k e t s的局域网内聊天系统的函数实现的目的。
结果及分析:程序运行以后,经过局域网内测试,实现了在局域网内的好友添加,聊天等功能,基本上完成了本实验的全部要求。
但由于时间仓促,再加上本人水平有限,对这方面的知识还有所欠缺,经过这次课程设计,对此有了一个很大的提高。
源程序;一 Client端程序代码package wangluo;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.DataInputStream;import java.io.DataOutputStream;import javax.swing.JFrame;import javax.swing.JTextField;public class Client implements ActionListener {private JTextField jtf = new JTextField("", 20);JFrame jf = new JFrame("不用注册直接登陆");public Client() {jf.setLayout(new BorderLayout());jf.add(jtf, BorderLayout.NORTH);jtf.addActionListener(this);jf.pack();jf.setLocation(500, 300);jf.setResizable(false);jf.setVisible(true);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}@Overridepublic void actionPerformed(ActionEvent e) {jf.dispose();new ThreadClient(jtf.getText());}public static void main(String[] args) {new Client();}}二ThreadClient端程序代码:package wangluo;import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.DataInputStream;import java.io.DataOutputStream;import .Socket;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextArea;import javax.swing.JTextField;public class ThreadClient extends Thread implements ActionListener { private String name = "";private int a;private JTextField jtf = new JTextField("", 25);private JTextArea jta = new JTextArea(30, 40);private DataOutputStream dos;private DataInputStream dis;private Socket s;public ThreadClient(String temp) {=temp;JFrame jf = new JFrame("聊天界面");jf.setLayout(new BorderLayout());JButton jb = new JButton("发送");JPanel jp = new JPanel();jta.setLayout(new GridLayout(1, 2));jp.add(jtf);jp.add(jb);jf.add(jp, BorderLayout.NORTH);jf.add(jta);jb.addActionListener(this);jtf.addActionListener(this);jf.pack();jf.setLocation(450, 200);jf.setVisible(true);jf.setSize(400, 350);try {s = new Socket("127.0.0.1", 1024);dos = new DataOutputStream(s.getOutputStream());dis=new DataInputStream(s.getInputStream());dos.writeUTF("<1.1>");dos.writeUTF(name);System.out.println("heh");} catch (Exception e) {e.printStackTrace();}jf.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {try {dos.writeUTF("<1.4>");Thread.sleep(2000);dis.close();dos.close();s.close();} catch (Exception e1) {e1.printStackTrace();}System.exit(1);}});this.start();}@Overridepublic void run() {while(true){try {Thread.sleep(3000);dos.writeUTF("<1.3>");jta.setText(dis.readUTF());} catch (Exception e) {break;}}}@Overridepublic void actionPerformed(ActionEvent ae) { String comn=jtf.getText();if(!"".equals(comn)){try {dos.writeUTF("<1.2>");dos.writeUTF(comn);jtf.setText("");jtf.requestFocus();} catch (Exception e) {e.printStackTrace();}}}}三ThreadServer端程序代码:package wangluo;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import .ServerSocket;import .Socket;public class ThreadServer extends Thread {//private StringBuffer message = new StringBuffer();private static String message="";private Socket s;private String name="";public ThreadServer(Socket s) {this.s = s;}public void run() {try {DataOutputStreamdos=new DataOutputStream(s.getOutputStream());DataInputStream dis=new DataInputStream(s.getInputStream());while (true) {String temp=dis.readUTF();if("<1.1>".equals(temp)){name=dis.readUTF();message="欢迎"+name+"进入!"+"\n"+message;}else if("<1.2>".equals(temp)){message=name+"说:"+dis.readUTF()+"\n"+message;}else if("<1.3>".equals(temp)){dos.writeUTF(message);}else if("<1.4>".equals(temp)){message=name+"离开"+"\n"+message;break;}}dos.close();dis.close();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(1024);while (true) {Socket s = ss.accept();new ThreadServer(s).start();}}}安装演示说明详细步骤:首先将自己所在电脑作为服务器端,在JAVA环境下运行该程序,出现以下页面:再在光标所示位置输入用户名称,或直接按回车键进入聊天界面:再将其他主机作为客户端,与服务器所在的主机进行连接,成功后界面如下:在输入框中输入要发送的信息,点击发送如上所示,本实验演示完毕。