网络与通信 实验报告2.doc_第1页
网络与通信 实验报告2.doc_第2页
网络与通信 实验报告2.doc_第3页
网络与通信 实验报告2.doc_第4页
网络与通信 实验报告2.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网络与通信课程实验报告实验2:Socket通信编程姓名 院系计算机学院学号 任课教师钱权指导教师钱权实验地点行健楼603实验时间一3-4实验课表现出勤、表现得分(10)实验报告得分(40)实验总分操作结果得分(50)实验目的:1. 掌握Socket编程过程;2. 编写简单的网络应用程序。实验内容:利用你选择的任何一个编程语言,分别基于TCP 和UDP 编写一个简单的Client/Server 网络应用程序。具体程序要求参见实验指导书。要求以附件形式给出:l 系统概述:运行环境、编译、使用方法、实现环境、程序文件列表等;l 主要数据结构;l 主要算法描述; l 用户使用手册;l 程序源代码;实验要求:(学生对预习要求的回答)(10分)得分:l Socket编程客户端的主要步骤l Socket编程服务器端的主要步骤实验过程中遇到的问题如何解决的?(10分)得分:问题1:在编写Socket程序时如何使客户端与服务端建立连接?在Socket的服务器端口,建立一个死循环,不断的监听客户端所发送的connect()请求,当有相应的请求到来时,建立连接,退出死循环。问题2:连接简历后如何传送字符传?通过Socket自带的send()和receive()函数,实现客户端与服务器的信息交流发送。在设置相应的一对发送函数时,要注意相对应的函数循序,否则可能导致死锁。问题3:在已成功发送数据之后,出现receive()函数返回值为0。在完成发送之后,如果调用close()函数,则相关的发送字节数将被清零。本次实验的体会(结论)(10分)得分:通过这次对Socket 的编程,我对Socket的工作原理有了更深入的认识与理解,并提高了自身的编程水平,同时在学习能力上有了更大的进步。通过这次的学习与认知,基本已经掌握并能较为熟练的编写socket程序,虽然过程中遇到了不少问题,但是,对自身的提高还是益处良多的。思考题:(10分)思考题1:(4分)得分:你所用的编程语言在Socket通信中用到的主要类及其主要作用。在这次的编写Socket程序中,主要用到了java语言,实现了对Socket的定义到连接再到通信的全过程。思考题2:(6分)得分:说明TCP和UDP编程的主要差异和特点。TCP是有连接传送方式,在进行通信之前,需要先建立连接,相关信息交流函数为send()和receive(),其中不用给出相应的发送或接收地址。UDP是无连接传送方式,在通信之前无需建立连接,相关的交流函数为sendto()和receivefrom(),其中需要给出相应的发送或接收地址。指导教师评语:日期: 程序源代码:TCP:package tcp;import .*;import java.io.*;import java.util.*;public class Client public static void main(String args) throws IOException Socket s = new Socket(localhost, 30000); String flag = ; Scanner scan = new Scanner(s.getInputStream(); if (scan.hasNextLine() flag = scan.nextLine().trim(); if (ok.equals(flag) File file = new File(d:a.txt); if (!file.exists() | !file.isFile() System.out.println(File + args2 + does not exist or is not a normal file.); System.exit(0); DataOutputStream out = new DataOutputStream(s.getOutputStream(); out.writeUTF(aaaaaaaaaaaaaa); out.writeLong(file.length(); FileInputStream in = null; try in = new FileInputStream(file); byte buffer = new byte1024 * 8; int len = -1; System.out.println(File tansfer start.); while (len = in.read(buffer) != -1) out.write(buffer, 0, len); System.out.println(File tansfer complete.); catch (Exception e) System.out.println(Error: + e.getMessage(); System.exit(1); finally try if (in != null) in.close(); catch (Exception e) out.writeUTF(bbbbbbbbbb); if (out != null) out.close(); if (scan != null) scan.close(); if (s != null) s.close();package tcp;import java.io.DataInputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintStream;import .ServerSocket;import .Socket;public class Server extends Thread public static void main(String args) throws IOException boolean isStop = false; ServerSocket ss = null; try ss = new ServerSocket(30000); while (!isStop) Socket socket = ss.accept(); PrintStream ps1 = new PrintStream(socket.getOutputStream(); ps1.println(ok); ps1.flush(); InputStream in = socket.getInputStream(); DataInputStream dis = new DataInputStream(in); String head = dis.readUTF(); Long length = dis.readLong(); System.out.println(head); System.out.println(length); File file = new File(e:a.txt); if (!file.exists() file.createNewFile(); try FileOutputStream out = new FileOutputStream(file); byte buffer = new byte1024 * 8; int len = -1; Long n = 0l; while (len = dis.read(buffer) != -1) out.write(buffer, 0, len); n += len; if (n + 1024 * 8) length) int lastLen = (int) (length - n); len = dis.read(buffer, 0, lastLen); out.write(buffer, 0, len); break; catch (Exception e) System.out.println(Error: + e.getMessage(); String anotherhead = dis.readUTF(); System.out.println(anotherhead); try if (in != null) in.close(); catch (Exception e) socket.close(); catch (Exception e) UDP:package udp;import java.io.*; import java.awt.*; import java.awt.event.*; import .*; public class chata extends Frame implements ActionListener Label label = new Label(发言); Panel panel = new Panel(); TextField tf = new TextField(10); TextArea ta = new TextArea(); public chata() super(A方); setSize(250,250); panel.add(label); panel.add(tf); tf.addActionListener(this); add(North,panel); add(Center,ta); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e)System.exit(0);); show(); /startup listener Listener listener = new Listener(); Thread thread = new Thread(listener); thread.start(); public void actionPerformed(ActionEvent e) /把要说的话发出去 String str = tf.getText(); byte buf = str.getBytes(); tf.setText(null); ta.append(我说:+str); ta.append(n); try DatagramSocket socket = new DatagramSocket(); DatagramPacket packet = new DatagramPacket(buf,buf.length); InetAddress remote_addr = InetAddress.getByName(localhost); packet.setAddress(remote_addr); /send to remote port 8877 packet.setPort(8877); socket.send(packet); catch (UnknownHostException uhe) System.out.println(Unknown Host!); catch (IOException ioe) System.out.println(IO Error!); class Listener implements Runnable public void run() try for(;) /监听本地端口8888 DatagramSocket socket = new DatagramSocket(8888); DatagramPacket packet = new DatagramPacket(new byte256, 256); socket.receive(packet); ByteArrayInputStream bin = new ByteArrayInputStream(packet.getData(); DataInputStream din = new DataInputStream(bin); String str = din.readLine(); ta.append(对方说:+str); ta.append(n); socket.close(); catch (IOException ioe) System.out.println(IO Error!); public static void main(String args) chata a = new chata(); package udp;import java.io.*; import java.awt.*; import java.awt.event.*; import .*; public class chatb extends Frame implements ActionListener Label label = new Label(发言); Panel panel = new Panel(); TextField tf = new TextField(10); TextArea ta = new TextArea(); public chatb() super(B方); setSize(250,250); panel.add(label); panel.add(tf); tf.addActionListener(this); add(North,panel); add(Center,ta); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e)System.exit(0);); show(); /startup listener Listener listener = new Listener(); Thread thread = new Thread(listener); thread.start(); public void actionPerformed(ActionEvent e) /把要说的话发出去 String str = tf.getText(); byte buf = str.getBytes(); tf.setText(null); ta.append(我说:+str); ta.append(n); try DatagramSocket socket = new DatagramSocket(); DatagramPacket packet = new DatagramPacket(buf,buf.length); InetAddress remote_addr = InetAddress.getByName(localhost); packet.setAddress(remote_addr); /send to remote port

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论