




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络通信程序设计课程论文 班级:08网络(1)班 姓名: 王捷 学号:081402124 指导老师: 肖东目录1、引言2、面向socket编程2.1.socket设计要求2.2.程序修改的功能2.3.程序代码:2.4.运行结果:3、基于UDP的网络编程3.1.UDP设计要求3.2.程序修改的功能3.3.程序修改以及代码:3.4.运行结果:4、基于协议的网络编程4.1.网络协议设计要求4.2.程序修改的功能4.3. 程序代码.4.4. 运行结果.5、组播编程5.1.实验要求5.2.程序修改的功能5.3.程序修改以及代码:5.4.运行结果:6、心得体会1、 引言网络编程简单的理解就是两台计算机相互通讯数据,通过使用套接字来达到进程间通信目的编程就是网络编程。网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理。网络通讯程序设计这门课程采用Java语言进行程序编写,Java突出的优点是通过预定义的库可以实现很强的功能,而不需要程序员做很多的事情。对于Java而言,这些Socket的Api存在与 这个包里面,因此只要导入这个包就可以准备网络编程了, Socket、UDP、组播、协议就是网络编程技术的一部分。这门课程的课程设计就从socket、UDP、组播、协议几个方面分别进行编写一些简单的例子。2、 面向socket编程2.1.socket设计要求建立两个独立的面向SOCKET编程的JAVA工程,用于服务器和客户端系统;建立SOCKET的JAVA类,并能正确运行且能实现SOCKET通信;对JAVA类的功能进行拓广,使SOCKET用于某一具体的应用。2.2.程序修改的功能 实现界面图形化:客户端实现界面图形化,服务端则没有界面图形化。 实现客户端能够即时聊天功能:当打开server端后,运行两个客户端,便可进行即时聊天,聊天记录没有保存,没有显示IP,只能进行简单的聊天。每当一个客户端连接上时,服务端会显示“a client connected!”,当每一个客户端退出时,便会显示“client closed!”2.3.程序关键代码:2.3.1服务端ChatServer的代码:import java.io.*;import .*;import java.util.*;public class ChatServer boolean started = false;ServerSocket ss = null;List clients = new ArrayList();public static void main(String args) new ChatServer().start();public void start() try ss = new ServerSocket(8888);started = true; catch (BindException e) System.out.println(端口使用中.);System.out.println(请关掉相关程序并重新运行服务器!);System.exit(0); catch (IOException e) e.printStackTrace();try while(started) Socket s = ss.accept();Client c = new Client(s); System.out.println(a client connected!);new Thread(c).start();clients.add(c); catch (IOException e) e.printStackTrace(); finally try ss.close(); catch (IOException e) e.printStackTrace(); class Client implements Runnable private Socket s;private DataInputStream dis = null;private DataOutputStream dos = null;private boolean bConnected = false;public Client(Socket s) this.s = s;try dis = new DataInputStream(s.getInputStream();dos = new DataOutputStream(s.getOutputStream();bConnected = true; catch (IOException e) e.printStackTrace();public void send(String str) try dos.writeUTF(str); catch (IOException e) clients.remove(this);System.out.println(对方退出了!我从List里面去掉了!);public void run() try while(bConnected) String str = dis.readUTF(); System.out.println(str);for(int i=0; iclients.size(); i+) Client c = clients.get(i);c.send(str); catch (EOFException e) System.out.println(Client closed!); catch (IOException e) e.printStackTrace(); finally try if(dis != null) dis.close();if(dos != null) dos.close();if(s != null) s.close(); catch (IOException e1) e1.printStackTrace();2.3.2客户端ChatClient代码:import java.awt.*;import java.awt.event.*;import java.io.*;import .*;public class ChatClient extends Frame Socket s = null;DataOutputStream dos = null;DataInputStream dis = null;private boolean bConnected = false;TextField tfTxt = new TextField();TextArea taContent = new TextArea();Thread tRecv = new Thread(new RecvThread();public static void main(String args) new ChatClient().launchFrame();public void launchFrame() setLocation(400, 300);this.setSize(300, 300);add(tfTxt, BorderLayout.SOUTH);add(taContent, BorderLayout.NORTH);pack();this.addWindowListener(new WindowAdapter() Overridepublic void windowClosing(WindowEvent arg0) disconnect();System.exit(0););tfTxt.addActionListener(new TFListener();setVisible(true);connect();tRecv.start();public void connect() try s = new Socket(, 8888);dos = new DataOutputStream(s.getOutputStream();dis = new DataInputStream(s.getInputStream(); System.out.println(connected!);bConnected = true; catch (UnknownHostException e) e.printStackTrace(); catch (IOException e) e.printStackTrace();public void disconnect() try dos.close();dis.close();s.close(); catch (IOException e) e.printStackTrace();private class TFListener implements ActionListener public void actionPerformed(ActionEvent e) String str = tfTxt.getText().trim();tfTxt.setText();try dos.writeUTF(str);dos.flush(); catch (IOException e1) e1.printStackTrace();private class RecvThread implements Runnable public void run() try while(bConnected) String str = dis.readUTF();taContent.setText(taContent.getText() + str + n); catch (SocketException e) System.out.println(退出了,bye!); catch (EOFException e) System.out.println(退出了,bye - bye!); catch (IOException e) e.printStackTrace();2.4.运行结果:运行服务端,接着运行客户端,多个客户端互发信息,运行显示如下:图2-1 启动程序运行效果关闭客户端后关闭服务端,运行结果如下:图2-2 关闭程序后显示结果3、 基于UDP的网络编程3.1.UDP设计要求建立两个独立的基于UDP编程的JAVA工程,用于服务器和客户端系统;建立UDP的JAVA类,并能正确运行且能实现数据报通信;对JAVA类的功能进行拓广,使基于UDP编程用于某一具体的应用。3.2.程序修改的功能实现界面图形化能手动输入对方IP,跟对方建立聊天实现客户端实时聊天功能,能够互发信息,聊天消息能显示对方IP地址和对方名字3.3.程序修改以及代码:UDP_A:import .*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class A extends JFrame implements Runnable, ActionListener JTextField outmessage = new JTextField(30); JTextField name = new JTextField(12); JTextArea inmessage = new JTextArea(12, 20); JButton b = new JButton(发送);JTextField add = new JTextField(30); A() super(基于UDP的聊天工具:A ); setBounds(500, 100, 400, 400); setVisible(true); Box a = Box.createVerticalBox(); Box c = Box.createHorizontalBox(); Box p = Box.createHorizontalBox(); Box h = Box.createHorizontalBox(); b.addActionListener(this); p.add(new JLabel(你的名字:); p.add(name); p.add(outmessage); p.add(b); c.add(new JLabel(对方的IP:); c.add(add); a.add(p); a.add(c); a.add(h); Container con = getContentPane(); con.add(new JScrollPane(inmessage), BorderLayout.CENTER); con.add(a, BorderLayout.SOUTH); Thread thread = new Thread(this); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); validate(); thread.start(); public void actionPerformed(ActionEvent event) if (event.getSource() = b) String s; s = name.getText() + said: + outmessage.getText(); byte b = s.trim().getBytes(); try InetAddress address = InetAddress.getByName(add.getText().trim(); DatagramPacket data = new DatagramPacket(b, b.length, address, 8989); DatagramSocket mail = new DatagramSocket(); mail.send(data); inmessage.append(You said: + outmessage.getText()+n); outmessage.setText(null); outmessage.requestFocus(); catch (Exception e) public void run() DatagramPacket pack = null; DatagramSocket mail = null; byte b = new byte5689; try pack = new DatagramPacket(b, b.length); mail = new DatagramSocket(8787); catch (Exception e) while (true) try mail.receive(pack); String message = new String(pack.getData(), 0, pack.getLength(); inmessage.append(message+n); catch (Exception e) public static void main(String args) A a = new A(); UDP_B:import java.awt.*;import .*;import java.awt.event.*;import javax.swing.*;public class B extends JFrame implements Runnable, ActionListener JTextField outmessage = new JTextField(30); JTextField name = new JTextField(12); JTextArea inmessage = new JTextArea(12, 20); JButton b = new JButton(发送); JTextField add = new JTextField(30); B() super(基于UDP的聊天工具:B ); setBounds(200, 100, 400, 400); setVisible(true); Box a = Box.createVerticalBox(); Box c = Box.createHorizontalBox(); Box p = Box.createHorizontalBox(); Box q = Box.createHorizontalBox(); b.addActionListener(this); p.add(new JLabel(你的名字); p.add(name); p.add(outmessage); p.add(b); c.add(new JLabel(对方的IP:); c.add(add);/ q.add(l); a.add(p); a.add(c); a.add(q); Container con = getContentPane(); con.add(new JScrollPane(inmessage), BorderLayout.CENTER); con.add(a, BorderLayout.SOUTH); Thread thread = new Thread(this); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); validate(); thread.start(); public void actionPerformed(ActionEvent event) if (event.getSource() = b) String s; s = name.getText() + said: + outmessage.getText(); byte b = s.trim().getBytes(); try InetAddress address = InetAddress.getByName(add.getText().trim(); DatagramPacket data = new DatagramPacket(b, b.length, address, 8787); DatagramSocket mail = new DatagramSocket(); mail.send(data); inmessage.append(n+You said: + outmessage.getText(); outmessage.setText(null); outmessage.requestFocus(); catch (Exception e) / else if (event.getSource() = l) / F u = new F();/ public void run() DatagramPacket pack = null; DatagramSocket mail = null; byte b = new byte5689; try pack = new DatagramPacket(b, b.length); mail = new DatagramSocket(8989); catch (Exception e) while (true) try mail.receive(pack); String message = new String(pack.getData(), 0, pack.getLength(); /inmessage.append(Data came from: + pack.getAddress(); inmessage.append(n+message); catch (Exception e) public static void main(String args) B b = new B(); 3.4.运行结果:4、 基于协议的网络编程4.1.网络协议设计要求建立一个的基于协议编程的JAVA工程;建立协议编程的JAVA类,并能正确运行且能实现协议通信;对JAVA类的功能进行拓广,使基于协议编程用于某一具体的应用。4.2.程序修改的功能修改协议。4.3.程序修改以及代码:package Protocol;import java.io.*;import .*;public class ClientMainTest public static void main(String args) throws IOException Socket kkSocket = null; PrintWriter out = null; BufferedReader in = null; try kkSocket = new Socket(localhost, 5252); out = new PrintWriter(kkSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream(); catch (UnknownHostException e) System.err.println(Dont know about host of server.); System.exit(1); catch (IOException e) System.err.println(Couldnt get I/O for the connection ); System.exit(1); BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in); String fromServer; String fromUser; while ( (fromServer = in.readLine() != null) System.out.println(Server: + fromServer); if (fromServer.equals(Bye.) break; fromUser = stdIn.readLine(); if (fromUser != null) System.out.println(Client: + fromUser); out.println(fromUser); out.close(); in.close(); stdIn.close(); kkSocket.close(); package Protocol;import java.io.*;import .*;public class MultiServerTest public static void main(String args) throws IOException ServerSocket serverSocket = null; boolean listening = true; try serverSocket = new ServerSocket(5252); catch (IOException e) System.err.println(Could not listen on port: 5252.); System.exit( -1); while (listening) new MultiServerThreadTest(serverSocket.accept().start(); serverSocket.close(); package Protocol;import java.io.*;import .*;public class MultiServerThreadTest extends Thread private Socket socket = null; public MultiServerThreadTest(Socket socket) super(MultiServerThreadTest); this.socket = socket; public void run() try PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader( socket.getInputStream(); String inputLine, outputLine; ServerProtocolTest kkp = new ServerProtocolTest(); outputLine = cessInput(null); out.println(outputLine); while ( (inputLine = in.readLine() != null) outputLine = cessInput(inputLine); out.println(outputLine); if (outputLine.equals(Bye) break; out.close(); in.close(); socket.close(); catch (IOException e) e.printStackTrace(); package Protocol;public class ServerProtocolTest private static final int WAITING = 0; private static final int SENTKNOCKKNOCK = 1; private static final int SENTCLUE = 2; private static final int ANOTHER = 3; private static final int NUMJOKES = 5; private int state = WAITING; private int currentJoke = 0; private String clues = 1, 2, 3, 4, 5; private String answers = 6, 7, 8, 9, 10; public String processInput(String theInput) String theOutput = null; if (state = WAITING) theOutput = Hello; state = SENTKNOCKKNOCK; else if (state = SENTKNOCKKNOCK) if (theInput.equalsIgnoreCase(Hello!) theOutput = cluescurrentJoke; state = SENTCLUE; else theOutput = Sorry, you are wrong. Please try again.; else if (state = SENTCLUE) if (theInput.equalsIgnoreCase(cluescurrentJoke + hzu) theOutput = answerscurrentJoke + yes; state = ANOTHER; else theOutput = right + hero; state = SENTKNOCKKNOCK; else if (state = ANOTHER) if (theInput.equalsIgnoreCase(y) theOutput = You are right!; if (currentJoke = (NUMJOKES - 1) currentJoke = 0; else currentJoke+; state = SENTKNOCKKNOCK; else theOutput = Bye.; state = WAITING; return theOutput; 4.4.运行结果: 运行服务端运行客户端 输入hello! 输入1 hzu 输入y5、 组播编程5.1.实验要求建立两个独立的基于组播编程的JAVA工程,用于服务器和客户端系统;在工程中建立相关的JAVA类,拷贝代码后调试运行,使其能正确运行且能实现组播通信;对组播程序的功能进行拓广,使用于某一具体的应用。5.2.程序修改的功能实现了界面图形化,发送消息显示在文本区域里,要发送消息时,必须点击发送按钮。利用多线程实现了群发聊天功能。运行服务端,运行多个客户端,一个客户端发送的消息,每个运行的客户端都可以收到信息。无法保存聊天记录,这方面有待完善。5.3.程序修改以及代码:5.3.1服务器Server核心代码: import .*;import java.io.*;import java.util.*;public class Server public static void main(String args) try ServerSocket ss = new ServerSocket(8088);/实现Socket List sockets = new ArrayList();/创建一个集合,保存文字消息 while(true) Socket s = ss.accept(); sockets.add(s);/向集合中添加Socket的对象S,把听到的内容保存到集合中 Thread t1 = new ChatThread(s,sockets);/线程 t1.start(); catch (IOException e) e.printStackTrace(); class ChatThread extends Thread Socket s; List sockets; public ChatThread(Socket s,List sockets) this.s=s; this.sockets=sockets; public void run() try BufferedReader in = new BufferedReader( new InputStreamReader(s.getInputStream();/包装成字符流 while(true) String str = in.readLine();/读BufferedReader for(int i=0;isockets.size();i+)/利用For循环遍历集合 Socket s2 = (Socket)sockets.get(i);/创建Socket对象S2,强转成Socket,并获取下标 PrintWriter out = new PrintWriter(s2.getOutputStream();/文本流输出 out.println(str);/打印字符 out.flush();/刷新
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 财务安全库存管理办法
- 聊城城景观管理办法
- 东莞幼托机构管理办法
- 仓储保管收费管理办法
- 不同性格人员管理办法
- 血防林工程管理办法
- 街道拆迁工作管理办法
- 街区管理办法运营机制
- iris配置管理办法
- 虫害防治实施管理办法
- 施工项目部会议管理制度
- 2024-2025学年安徽省八年级语文上册第一次月考试卷04
- 欢迎一年级新生入学课件
- 译林版七年级上册英语阅读理解专项练习题100篇含答案
- 单位委托员工办理水表业务委托书
- 矿山生态修复监理工作资料编制内容和要求、施工监理主要工作程序框图、工程施工与监理表式
- 夫妻婚内财产协议书(2024版)
- 小菜园租赁合同范本
- DL-T1342-2014电气接地工程用材料及连接件
- 血管内超声在冠状动脉疾病中应用的中国专家共识(全文)
- (正式版)JTT 1495-2024 公路水运危险性较大工程安全专项施工方案审查规程
评论
0/150
提交评论