当前位置:   article > 正文

天津理工大学计算机网络实验二——基于TCP / UDP的socket编程_天津理工大学 计算机网络

天津理工大学 计算机网络
  1. 实验内容:
    1. 利用Java或C++语言,分别基于TCP和UDP编写一个简单的Client/Server网络应用程序。要求实现客户向服务器传输任意一个字符串,服务器将收到的字符串变换成大写后传回客户。
    2. 修改上述程序,实现服务器根据客户请求,将服务器端指定的文件可靠地传输给客户。如果服务器没有指定的文件,服务器将给客户返回一个信息,通知客户其请求文件不存在。
    3. 有条件的同学可以进一步改进b)的程序,使之更实用。比如可以请求服务器先传输目录,然后客户根据目录请求传输文件等。
  2. 实验方式:每位同学上机编程实验,实验指导教师现场指导。程序可参考附录的程序1、程序2、程序3和程序4(程序中有错误需完善)
  3. 实验报告:在实验报告中要说明Socket编程的客户端和服务器端主要步骤、利用Java语言用到的主要类及其主要作用、TCP和UDP编程的主要差异和特点、你所实现的文件传输的程序代码、实验过程和实验结果。

 

一,TCP的socket编程

注意,先运行服务端程序,再运行客户端程序输入字母

客户端程序:(实验步骤及其,类功能的解释)

  1. //客户端:
  2. package cn.itcast.util;
  3. import java.io.*;
  4. import java.net.*;
  5. class TCPClient{
  6.     public static void main(String argv[]) throws Exception
  7.     {
  8.         String sentence;//声明字符串变量用于存储字符串输入和传送
  9.         String modifiedSentence;//从服务器得到,并送到用户标准输出
  10.         System.out.println("请输入将要转换的字符串");
  11.         BufferedReader infromUser = new BufferedReader(
  12.                 new InputStreamReader(System.in));//将流连接到标准输入 inFromUser程序的输入流
  13.         Socket clientSocket = new Socket("127.0.0.1",6789);//clientSocket为定义的套接字
  14.         DataOutputStream outToServer = new DataOutputStream(
  15.             clientSocket.getOutputStream()); //DataOutputStream包含在java.io.*包中
  16.         BufferedReader infromServer = new BufferedReader(new InputStreamReader(
  17.                         clientSocket.getInputStream()));
  18.         //inFromServer连接套接字的输入流, BufferedReader包含在java.io.*包中
  19.         sentence = infromUser.readLine(); //将用户输入的一行读入到sentence
  20.         outToServer.writeBytes(sentence + '\n');//outToServer程序的输出流
  21.         modifiedSentence = infromServer.readLine();//当到达服务器时,他们通过服务器端已将该字符串转换完成
  22.         System.out.println("通过服务器端已将该字符串转换完成");
  23.         System.out.println("FROM SERVER:"+
  24.             modifiedSentence);//将服务器返回的内容显示
  25.         clientSocket.close(); //关闭套接字,tcp连接也随之关闭
  26.     }
  27. }

 

服务端程序:(实验步骤及其,类功能的解释)

  1. package cn.itcast.util;
  2. import java.io.*;
  3. import java.net.*;
  4. class TCPServer{
  5.     public static void main(String argv[]) throws Exception
  6.     {
  7.         String ClientSentence;//声明字符串变量用于存储字符串输入和传送
  8.         String capitalizedSentence;//从客户端得到的输入内容
  9.         ServerSocket welcomeSocket = new ServerSocket(6789);//创建welcomeSocket对象,并在6789端口监听
  10.         while(true){
  11.         Socket connectionSocket = welcomeSocket.accept();//获取从客户传来的字符
  12.         BufferedReader infromClient = new BufferedReader(new InputStreamReader(
  13.                         connectionSocket. getInputStream()));//创建缓冲输入流对象
  14.         DataOutputStream outToClient =
  15.                 new DataOutputStream(connectionSocket.getOutputStream());//创建缓冲输出流对象
  16.         ClientSentence = infromClient. readLine();//按行读取用户输入等待信息
  17.         capitalizedSentence = ClientSentence.toUpperCase() + "\n";//将用户输入的字母进行转化
  18.         outToClient.writeBytes(capitalizedSentence);
  19.     }
  20.     }
  21. }

实验结果截图:

 

二,UDP的socket编程

客户端程序:(实验步骤及其,类功能的解释)

  1. package cn.itcast.util;
  2. import java.io.*;
  3. import java.net.*;
  4. class UDPClient {
  5.     public static void main(String args[]) throws Exception
  6.     {
  7.         BufferedReader inFromUser =
  8.                 new BufferedReader(new InputStreamReader(System.in));//创建缓冲输入流对象
  9.         DatagramSocket clientSocket = new DatagramSocket();//创建DatagramSocket对象
  10.         InetAddress IPAddress = InetAddress.getByName("127.0.0.1");//创建本机ip地址对象
  11.         byte[] sendData = new byte[1024];//用来存储要发送给服务器的数据
  12.         byte[] receiveData = new byte[1024];//用来接收从服务器,返回来的数据
  13.         String sentence = inFromUser.readLine();//从键盘按行读取输入数据
  14.         sendData = sentence.getBytes();//将输入的数据保存到数组sendData中
  15.         DatagramPacket sendPacket =
  16.                 new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
  17.         //创建DatagramPacket对象,初始化发送包的基本信息
  18.         clientSocket.send(sendPacket);//将封装好的数据包对象发送给服务器
  19.         DatagramPacket receivePacket =
  20.                 new DatagramPacket(receiveData, receiveData.length);//创建接收包对象
  21.         clientSocket.receive(receivePacket);//从服务端上接收,返回来的数据包
  22.         String modifiedSentence =
  23.                 new String(receivePacket.getData());//将数据包的比特流转化为String类型
  24.         System.out.println("FROM SERVER:" + modifiedSentence);//将数据信息进行打印
  25.         clientSocket.close();//关闭套接字,tcp连接也随之关闭
  26.     }

 

 

服务端程序:(实验步骤及其,类功能的解释)

  1. package cn.itcast.util;
  2. import java.io.*;
  3. import java.net.*;
  4. class UDPServer {
  5.     public static void main(String args[]) throws Exception
  6.     {
  7.         DatagramSocket serverSocket = new DatagramSocket(9876);//创建serverSocket对象,并在9876端口监听
  8.         byte[] sendData = new byte[1024];//用来存储要发送给服务器的数据
  9.         byte[] receiveData = new byte[1024];//用来接收从服务器,返回来的数据
  10.         while(true)
  11.         {
  12.             DatagramPacket receivePacket =
  13.                     new DatagramPacket(receiveData, receiveData.length);//创建接收包对象
  14.             serverSocket.receive(receivePacket);//从客户端上接收,发送来的数据包
  15.             String sentence = new String(receivePacket.getData());//将数据包的比特流转化为String类型
  16.             InetAddress IPAddress = receivePacket.getAddress();//获取客户端的ip地址
  17.             int port = receivePacket.getPort();//获取客户端的端口号
  18.             String capitalizedSentence = sentence.toUpperCase();//对数据进行大小写转化
  19.             sendData = capitalizedSentence.getBytes();//将转化之后的数据转化成比特流
  20.             DatagramPacket sendPacket =
  21.                     new DatagramPacket(sendData, sendData.length, IPAddress, port);//创建DatagramPacket对象,初始化发送包的基本信息
  22.             serverSocket.send(sendPacket);//将数据发给客户端
  23.         }
  24.     }
  25. }

实验结果:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/660412
推荐阅读
相关标签
  

闽ICP备14008679号