基于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页
正在阅读:
仁爱版九年级英语上册期中测试题02-28
2013年第三批年检公告11-28
中国味精行业发展现状全景调查与未来投资前景评估报告04-16
高一自我鉴定800字_自我鉴定范文07-30
假面舞会策划书06-09
毒品换算公式千奇百怪的贩毒招数05-03
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 基于
- 编程
- socket
- TCP
- UDP
- 课程研发的策略
- 产品质量档案管理制度
- 预应力工程监理细则
- 2015年动物防疫法规知识竞赛试题(附答案)
- 苏教版八年级上册语文第一单元复习资料
- 四川大学《操作系统2265》15春在线作业2满分答案
- 基于建构主义理论的英语个性化与自主化学习
- 生物统计学课后重点题答案
- 信息分析与决策
- 60t比20行车试重方案
- 赏析一句话的5种答题方法 -
- 精选小学生国旗下讲话稿:安全常系心中
- 许国璋英语第二册第十课课文、对话、练习、答案
- 函授毕业论文统一规范
- 新手会计手工账做账详细流程
- 苏申内港线(江苏段)航道整治工程环境影响报告书
- 基于PLC的城市污水处理控制系统设计(开环) - 图文
- 模板计算书002
- 《我的野生动物朋友》阅读测试题
- 2011新规范、标准目录