基于TCP and UDP的socket编程

更新时间:2023-10-13 09:18:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

天津理工大学实验报告

学院(系)名称:计算机与通信工程学院 姓名 班级 刘强 教学2班 学号 实验项目 计算机网络 2015年4月30日 第7、8节 20126*** 专业 计算机科学与技术(中加) 基于TCP and UDP的socket编程 课程代码 实验地点 成绩 0662016 7-215 课程名称 实验时间 批改意见 教师签字: (一) 实验目的: 熟悉和掌握socket编程的基本理论和方法。掌握基于TCP和UDP的工作原理以及Socket编程的一般方法,能够编写简单的网络应用程序。 (二)实验环境: 软件环境:Windows 2000/XP / Eclipse 硬件环境:IBM-PC或兼容机 局域网、PC机连入Internet (三)实验学时: 2学时,必做. (四)实验内容: 利用Java或C++语言,分别基于TCP和UDP编写一个简单的Client/Server网络应用程序。要求实现客户向服务器传输任意一个字符串,服务器将收到的字符串变换成大写后传回客户。 (五)实验要求: 每位同学上机编程实验,实验指导教师现场指导。程序可参考附录的程序1、程序2、程序3和程序4(程序中有错误需完善)。在实验报告中要说明Socket编程的客户端和服务器端主要步骤、利用Java语言用到的主要类及其主要作用、TCP和UDP编程的主要差异和特点、你所实现的文件传输的程第1页 共6页

序代码、实验过程和实验结果。 (六)实验步骤: 程序代码: TCP Client: package tcpClient; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.Socket; public class tcpClient { 中 clientSocket.getOutputStream()); private static Socket clientSocket; public static void main(String args[]) throws Exception { String sentence; // 声明字符串变量用于存储字符串输入和传送 String modifiedSentence;// 从服务器得到,并送到用户标准输出 System.out.println(\请输入要转换的字符串:\clientSocket = new Socket(\为定义的套接字 BufferedReader inFromUser = new BufferedReader( // 创建inFromUser程序的输入流 new InputStreamReader(System.in)); // 将流连接到标准输入 DataOutputStream outToServer = new DataOutputStream( // DataOutputStream包含在java.io.*包BufferedReader inFromServer = // inFromServer 连接套接字的输入流 new BufferedReader(new InputStreamReader( // BufferedReader包含在java.io.*包中 clientSocket.getInputStream())); sentence = inFromUser.readLine(); // 将用户输入的一行 读入到sentence中 outToServer.writeBytes(sentence + '\\n'); // outToServer程序的输出流 modifiedSentence = inFromServer.readLine();// 当到达服务器时,他们进入modifiedSentence字符串中 System.out.println(\将服务器返回来的 // modifiedSentence打印到监第2页 共6页

视器上 } TCP Server: package tcpServer; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; class server { } 第3页 共6页

} clientSocket.close(); // 关闭套接字,tcp连接也随之关闭 private static ServerSocket welcomeSocket; public static void main(String argv[]) throws Exception { } String clientSentence; // 声明字符串变量用于存储字符串输入和传送 String capitalizedSentence; // 从从客户端得到 welcomeSocket = new ServerSocket(8579);// 创建welcomeSocket对象,在8579端口进行监听 while (true) { } Socket connectionSocket = welcomeSocket.accept();// 获取从客户端传来的字符 BufferedReader infromClient = new BufferedReader( new InputStreamReader( // BufferedReader包含在java.io.*包中 connectionSocket.getInputStream())); DataOutputStream outToClient = // outToClient程 序的输出流 new DataOutputStream(connectionSocket.getOutputStream()); clientSentence = infromClient.readLine(); // 把用户输入的送入clientSentence中 capitalizedSentence = clientSentence.toUpperCase() + '\\n';// 将发送行中的小写转换成大写 outToClient.writeBytes(capitalizedSentence); 执行结果: UDP Client: package udpClient; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class udpClient { public static void main(String args[]) throws Exception { System.out.println(\请输入要转换的字符串:\BufferedReader inFromUser = new BufferedReader(new InputStreamReader( System.in)); // 创建输入流,用于输入字符串 DatagramSocket clientSocket = new DatagramSocket(); // 创建一个DatagramSocket 对象 InetAddress IPAddress = InetAddress.getByName(\创建一个InetAddress byte[] sendData = new byte[1024]; // 创建字节数组 byte[] receiveData = new byte[1024]; String sentence = inFromUser.readLine(); // 读取输入的字符 sendData = sentence.getBytes(); // 将字符串转化为字节数组 DatagramPacket sendPacket = new DatagramPacket(sendData, // 创建DatagramPacket 对象, // 指定其发送地址和端口号 sendData.length, IPAddress, 8876); clientSocket.send(sendPacket); // 调用 socket 对象的 send()方法发送数据 DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); // 创建 DatagramPacket 对象, 用于接收数据 第4页 共6页

} } clientSocket.receive(receivePacket); // / 调用 socket 对象的 receive()方法接收数据 String modifiedSentence = new String(receivePacket.getData()); System.out.println(\clientSocket.close(); // 关闭客户端socket连接 UDP Server: package udpServer; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class udpServer { public static void main(String args[]) throws Exception { @SuppressWarnings(\DatagramSocket serverSocket = new DatagramSocket(8876);// 创建一个DatagramSocket // 对象,指定端口为8876 byte[] receiveData = new byte[1024]; // 创建字节数组 byte[] sendData = new byte[1024]; while (true) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); // 创建一个空DatagramPacket对象 serverSocket.receive(receivePacket); // 使用 receiver 方法接手客户端所发送到数据, // 如果客户端没有发送数据, 进程阻塞 String sentence = new String(receivePacket.getData()); InetAddress IPAddress = receivePacket.getAddress(); // 获取Client端IP地址 int port = receivePacket.getPort(); // 获取Client端端口号 String capitalizedSentence = sentence.toUpperCase(); // 将字符串转化成大写字母 sendData = capitalizedSentence.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData,// 创建DatagramPacket // 对象, 第5页 共6页

} } } // 指定其发送地址和端口号 sendData.length, IPAddress, port); serverSocket.send(sendPacket); // 调用 socket 对象的 send()方法发送数据 执行结果: 实验体会: (1) Datagram Sockets:数据包socket,一般传输方式为UDP (2) Stream Sockets:流socket,一般传输方式为TCP Java通过两个类DatagramSocket和DatagramPacket来支持但Datagram socket(UDP)。Datagram Socket不真正区分Server和Client,既可以用来写server,也可以写client。但对于java中的Socket类和ServerSocket类就只能分别来写客户端和服务器端(同时支持TCP与UDP,更Socket(String host,int port,boolean stream)构造方法中的stream即可)。 第6页 共6页

} } } // 指定其发送地址和端口号 sendData.length, IPAddress, port); serverSocket.send(sendPacket); // 调用 socket 对象的 send()方法发送数据 执行结果: 实验体会: (1) Datagram Sockets:数据包socket,一般传输方式为UDP (2) Stream Sockets:流socket,一般传输方式为TCP Java通过两个类DatagramSocket和DatagramPacket来支持但Datagram socket(UDP)。Datagram Socket不真正区分Server和Client,既可以用来写server,也可以写client。但对于java中的Socket类和ServerSocket类就只能分别来写客户端和服务器端(同时支持TCP与UDP,更Socket(String host,int port,boolean stream)构造方法中的stream即可)。 第6页 共6页

本文来源:https://www.bwwdw.com/article/tn4f.html

Top