网络通信程序设计课程报告
更新时间:2024-05-20 04:14:01 阅读量: 综合文库 文档下载
网络通信程序设计 课程论文 班级:08网络(1)班 姓名: 王捷 学号:081402124 指导老师: 肖东 23 目录
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 页 共 23 页
1
1、 引言
网络编程简单的理解就是两台计算机相互通讯数据,通过使用套接字来达到进程间通
信目的编程就是网络编程。 网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理。
网络通讯程序设计这门课程采用Java语言进行程序编写,Java突出的优点是通过预定义的库可以实现很强的功能,而不需要程序员做很多的事情。对于Java而言,这些Socket的Api存在与java.net 这个包里面,因此只要导入这个包就可以准备网络编程了, 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 java.net.*; import java.util.*;
public class ChatServer {
boolean started = false; ServerSocket ss = null;
List
public void start() {
try {
ss = new ServerSocket(8888);
第 2 页 共 23 页
2
new ChatServer().start();
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); out.println(\);
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) {
第 3 页 共 23 页
3
System. 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; i } } } catch (EOFException e) { System.out.println(\); } 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 java.net.*; 第 4 页 共 23 页 4 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() { @Override public 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(\); bConnected = true; } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); 第 5 页 共 23 页 5 } } 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(); } } 第 6 页 共 23 页 6 } } 2.4.运行结果: ①运行服务端,接着运行客户端,多个客户端互发信息,运行显示如下: 图2-1 启动程序运行效果 ②关闭客户端后关闭服务端,运行结果如下: 图2-2 关闭程序后显示结果 3、 基于UDP的网络编程 3.1.UDP设计要求 ①建立两个独立的基于UDP编程的JAVA工程,用于服务器和客户端系统; ②建立UDP的JAVA类,并能正确运行且能实现数据报通信; ③对JAVA类的功能进行拓广,使基于UDP编程用于某一具体的应用。 第 7 页 共 23 页 7 3.2.程序修改的功能 ①实现界面图形化 ②能手动输入对方IP,跟对方建立聊天 ③实现客户端实时聊天功能,能够互发信息,聊天消息能显示对方IP地址和对方名字 3.3.程序修改以及代码: UDP_A: import java.net.*; 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(); 第 8 页 共 23 页 8 thread.start(); } public void actionPerformed(ActionEvent event) { if (event.getSource() == b) { String s; s = name.getText() + \ + 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(\ + outmessage.getText()+'\\n'); outmessage.setText(null); outmessage.requestFocus(); } catch (Exception e) { } } } public void run() { DatagramPacket pack = null; DatagramSocket mail = null; byte[] b = new byte[5689]; 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: 第 9 页 共 23 页 9 import java.awt.*; import java.net.*; 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(); } 第 10 页 共 23 页 10 public void actionPerformed(ActionEvent event) { if (event.getSource() == b) { String s; s = name.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'+\ 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 byte[5689]; 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(\ inmessage.append('\\n'+message); } catch (Exception e) { } } } 第 11 页 共 23 页 11 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 java.net.*; public class ClientMainTest { public static void main(String[] args) throws IOException { Socket kkSocket = null; PrintWriter out = null; BufferedReader in = null; 第 12 页 共 23 页 12 try { kkSocket = new Socket(\ out = new PrintWriter(kkSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream())); } catch (UnknownHostException e) { System.err.println(\ System.exit(1); } catch (IOException e) { System.err.println(\ System.exit(1); } BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); String fromServer; String fromUser; while ( (fromServer = in.readLine()) != null) { System.out.println(\ if (fromServer.equals(\ break; } fromUser = stdIn.readLine(); if (fromUser != null) { System.out.println(\ out.println(fromUser); } } out.close(); in.close(); stdIn.close(); kkSocket.close(); } } package Protocol; import java.io.*; import java.net.*; public class MultiServerTest { public static void main(String[] args) throws IOException { ServerSocket serverSocket = null; boolean listening = true; try { serverSocket = new ServerSocket(5252); } 第 13 页 共 23 页 13 catch (IOException e) { System.err.println(\ System.exit( -1); } while (listening) { new MultiServerThreadTest(serverSocket.accept()).start(); } serverSocket.close(); } } package Protocol; import java.io.*; import java.net.*; public class MultiServerThreadTest extends Thread { private Socket socket = null; public MultiServerThreadTest(Socket socket) { super(\ 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 = kkp.processInput(null); out.println(outputLine); while ( (inputLine = in.readLine()) != null) { outputLine = kkp.processInput(inputLine); out.println(outputLine); if (outputLine.equals(\ break; } } out.close(); in.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } 第 14 页 共 23 页 14 PrintWriter(s2.getOutputStream());//文本流输出 out.println(str);//打印字符 out.flush();//刷新该流的缓冲 } } } catch (IOException e) {} finally{ try { s.close(); } catch (IOException e) {} } } } 客户端代码: import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class Client { JTextArea jta; JTextField jtf; JPanel p; JButton send; BufferedReader in; PrintWriter out; JTextField name; private void initGUI(){ JFrame f=new JFrame(\ f.setSize(400,300); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jta=new JTextArea(); jta.setEditable(false); f.add(new JScrollPane(jta)); jtf=new JTextField(27); name =new JTextField(20); 第 20 页 共 23 页 20 p =new JPanel(); send =new JButton(\发送\ p.add(jtf); p.add(send); f.add(name,\ f.add(p,\ f.setVisible(true); send.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { String text=jtf.getText(); jtf.setText(\ out.println(name.getText()+\ out.flush(); } }); } private void initNet(){ try { Socket s = new Socket(\创建Socket端口8008 out = new PrintWriter(s.getOutputStream());//文本流输出,利用Socket对象获得getOutputStream() in = new BufferedReader(new InputStreamReader(s.getInputStream())); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } //消息接收 private void receive(){ try { while(true){ String str = in.readLine(); if(str==null){ return ; } jta.append(str+\加载到JTextArea中,显示 } } catch (IOException e) { e.printStackTrace(); } } private Client(){ this.initGUI(); 第 21 页 共 23 页 21 this.initNet(); } public static void main(String args[]){ Client c = new Client(); c.receive(); } } 5.4.运行结果: 6、 心得体会 这个学期其实也有Java语言这么课程,于是学习网络通信编程这门课程的时候不会太过于陌生,我们主要学习了Socket、UDP、网络协议以及组播编程4个知识点,以上机做实验为主,通过学习老师给出的程序例子,再经过分析修改,变成以各个知识点为基础的具体应用。在此过程中,从认识到了解再到基本掌握,循序渐进,提高了自己对网络通信编程的写作能力。 第 22 页 共 23 页 22
正在阅读:
网络通信程序设计课程报告05-20
无领导小组中的角色定位09-29
(桥)桥墩爬模施工12-22
新课程背景下高中政治课教与学方式的转变02-29
ECBP-CI-生物多样性和保护生物学培训-传统文化和生物多样性保护08-25
长安大学测试与传感器技术试题库及答案10-16
桥面板预制施工方案教学提纲04-13
小小金融家作文500字06-17
吊篮承载力验算书(私有)03-17
大学英国文学知识提纲及试题04-09
- 冀教版版五年级科学下册复习资料
- 微生物学复习提纲
- 2013—2014学年小学第二学期教研组工作总结
- 国有土地转让委托服务合同协议范本模板
- 我的固废说明书
- 企业管理诊断报告格式
- 东鼎雅苑施工组织设计
- 谈谈如何做好基层党支部书记工作
- 浮梁县环保局市级文明单位创建工作汇报
- 管理学基础知识
- 大学物理实验报告23 - PN结温度传感器特性1
- 计算机网络实践
- 酒桌上这四种情况下要坐牢,千万别不当回事……
- 国家康居示范工程建设技术要点
- 中国贴布行业市场调查研究报告(目录) - 图文
- 新课标下如何在高中物理教学中培养学生的创新能力初探
- 营养师冬季养生食谱每日一练(7月4日)
- 关注江西2017年第3期药品质量公告
- 建设海绵城市专题习题汇总
- 10万吨年环保净水剂建设项目报告书(2).pdf - 图文
- 网络通信
- 程序设计
- 课程
- 报告
- 天然气培训 Microsoft Word 文档 - 图文
- 大二下学期生物化学题库及答案
- 化药分类和所做临床试验
- 生理学第六章消化与吸收试题
- 武汉市体育馆中央空调毕业设计
- 数据库管理系统毕业论文--企业管理数据库设计
- 国际法模拟题
- 关于城市环境保护的社会实践报告
- 地下建筑结构论文
- 阴道分析物检查
- 直流稳压电源电路设计
- 人大代表学习心得体会(共9篇)
- 肾上腺皮质激素类药物
- 2016年春季新版沪科版七年级数学下学期第9章、分式单元复习试卷
- 行政服务中心XX年上半年工作总结
- 中考英语单选真题20套(1)
- 钻井井控培训理论考试试题
- 成本会计复习题附答案
- 2018-2023年中国钢铁电商行业市场调查分析与发展趋势研究预测报
- 五年级《小数乘法》教学反思