计算机网络原理 实验1 《Windows Socket编程》

一、实验目的

通过实验,熟悉并掌握计算机Windows 编程的基本知识,进一步加深对课堂所学基本内容的理解,掌握基本的Windows编程技巧,通过实验能够进行一些简单的网络程序设计。

二、实验内容

1、了解基本的Socket知识
2、基于Java完成Socket编程,设计并实现一个简单的聊天系统,包括客户端及服务器端。

  • 完成服务端使用telnet与服务器通信
  • 完成客户端与服务端通信
  • 完成基于多线程的实现服务端可以与多个客户端通信

3、可选,重构现有代码完成带界面的软件。实现各客户端之间聊天,以及多人聊天室。

三、实验方法

1、利用Java提供的java.net.Socket、java.net.ServerSocket等Socket相关工具,实现客户端与服务端的模拟通讯,即客户端、服务端各写一个Java类,并同时运行进行即时通讯测试;
2、上述测试完毕后即可开始构建图形化界面的多人聊天室以及私聊聊天室,即IP Messenger的原型。主要原理即单点对多点通讯、单点对单点通讯。由于Java图形化处理的Swing技术较老,这里选择C++的Qt平台进行图形化实现。Qt Creator中也提供了类似的Socket工具,整体使用方法与Java的Socket类似。

四、实验步骤

1、Socket通信测试

(1) 新建工程
创建一个简单的Java工程,这里使用IntelliJ IDEA完成。


(2) 建立两个Java类模拟客户端与服务端,使用telnet并通过Socket进行通信。 创建服务端类Java文件sampleServer.java,启动函数start负责建立服务器并等待连接,而停止方法`stop`负责关闭连接和相关的IO流。`accept`方法在serverSocket对象创建后等待客户端连接。如果没有客户端连接,轮询将继续,直到客户端连接,下面的代码将继续执行。连接建立后,双方建立通信通道,IO流进行数据读写。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class sampleServer {private ServerSocket serverSocket;private Socket clientSocket;private PrintWriter out;private BufferedReader in;public void start(int port) throws Exception {serverSocket = new ServerSocket(port);clientSocket = serverSocket.accept();out = new PrintWriter(clientSocket.getOutputStream(), true);in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));String inputLine;while ((inputLine = in.readLine()) != null) {if (".".equals(inputLine)) {out.println("good bye");stop();break;}out.println("server got msg: " + inputLine);}}public void stop() throws Exception {in.close();out.close();clientSocket.close();serverSocket.close();}public static void main(String[] args) {try {sampleServer server = new sampleServer();server.start(6666);} catch (Exception ex) {ex.printStackTrace();}}
}

创建客户端类Java文件sampleClient.java,StartConnection方法指定IP与端口,若与服务器成功建立连接,则获取建立的通道的IO流,out与in输入输出流,来实现后续与服务端的消息接收与发送。sendMessage方法基于IO流发送消息;StopConnection关闭与服务端的连接;主方法获得用户在命令行的输入,发送给服务端。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;public class sampleClient {private Socket clientSocket;private PrintWriter out;private BufferedReader in;public void startConnection(String ip, int port) throws Exception {clientSocket = new Socket(ip, port);out = new PrintWriter(clientSocket.getOutputStream(), true);in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));}public String sendMessage(String msg) throws Exception {out.println(msg);return in.readLine();}public void stopConnection() {try {in.close();out.close();clientSocket.close();} catch (Exception ex) {ex.printStackTrace();}}public static void main(String[] args) {try {// build the connectionsampleClient client = new sampleClient();client.startConnection("127.0.0.1", 6666);// receive the input string from terminal and send it to serverScanner sc = new Scanner(System.in);while (true) {String response = client.sendMessage(sc.nextLine());System.out.println(response);if (response.equals("good bye")) {client.stopConnection();break;}}} catch (Exception ex) {ex.printStackTrace();}}
}

2、图形化通信构建

构建相应的图形化客户端界面。这里使用Qt平台构建,具体的Socket通信方法与上述的Java方法的使用是类似的。下述是构建好的GUI及其通信效果。




五、实验结果

Socket通信测试结果:


其余结果已在实验步骤中进行了展示。

六、实验结论

我们平时说的最多的Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。 实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口。

七、实验小结

本次实验主要是体验了计算机网络中的TCP/IP协议在通信中的具体使用。通过自己调用相关的API和方法实现了基本的通讯功能和文件传输功能(限于局域网内),因此还是比较有成就感的,对于网络的认识也更进了一步。

套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
Socket不是某一层的协议,它是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组编程接口(即API),在设计模式中,socket就是门面模式(又称为外观模式,Facade),它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让socket去组织数据,以符合指定的协议。总的来说Socket就是一组API,对TCP/IP协议进行封装的API接口。

计算机网络原理 实验1 《Windows Socket编程》相关推荐

  1. 计算机网络云南大学实验四,云南大学软件学计算机网络原理实验四.doc

    云南大学软件学计算机网络原理实验四 实验四.web服务器套接字编程实验指导 1.实验目的: 编写一个WEB服务器程序,可以接受来自浏览器的访问,并传输页面(包含多个对象)到浏览器.掌握Socket编程 ...

  2. 计算机网络云南大学实验四,云南大学软件学院计算机网络原理实验四.doc

    云南大学软件学院计算机网络原理实验四 实验四.web服务器套接字编程实验指导 1.实验目的: 编写一个WEB服务器程序,可以接受来自浏览器的访问,并传输页面(包含多个对象)到浏览器.掌握Socket编 ...

  3. 计算机网络原理 大型实验,计算机网络原理实验 实验一

    <计算机网络原理实验 实验一>由会员分享,可在线阅读,更多相关<计算机网络原理实验 实验一(13页珍藏版)>请在人人文库网上搜索. 1.实验一 Wireshark的安装与使用一 ...

  4. 计算机网络原理 实验3 《IP数据包捕获及数据分析》

    计算机网络原理 实验3 <IP数据包捕获及数据分析> 一.实验目的 JPCAP是一个能够捕获.发送网络数据包的Java类库包.这个包用到了Winpcap/Libpcap和原始套接字API, ...

  5. 计算机网络原理 实验2 《NS3路由模拟实验》

    计算机网络原理 实验2 <NS3 路由模拟实验> 一.实验目的 1.了解NS3网络模拟器的基本操作: 2.学习采用距离矢量算法(Distance Vector Algorithm)的动态路 ...

  6. Windows Socket编程笔记之最简单的小Demo

    Windows Socket编程的大致过程: 服务器端: ----过程-------------对应的API-------  0.初始化         |  WSAStartup()  1.创建So ...

  7. 计算机网络原理实验(三)——小型校园网络模拟搭建

    计算机网络原理实验(三)--小型校园网络模拟搭建 前言 基础知识 拓扑图 网络地址划分 终端设备配置 三层交换机配置 查看配置后信息 路由器A配置 查看路由器A的配置 路由器B 路由器B的配置 二层交 ...

  8. 计算机网络原理实验实验九:路由器的基本配置,路由器单臂路由配置

    计算机网络原理实验实验九:路由器的基本配置,路由器单臂路由配置 任务1. 路由器的基本配置 实验目标  掌握路由器几种常用配置方法:  掌握采用Console线缆配置路由器的方法:  掌握采用T ...

  9. windows SOCKET编程

    在WINDOWS的SOCKET编程中,可以设置SOCKET的发送和接收缓冲区大小为1M,这样可以大大提升局域网的数据传输速度,默认为64K,最高可提高为5M/S, 实际代码如下: // 指定发送缓冲区 ...

最新文章

  1. 一招修复内存不能read_read文件一个字节实际会发生多大的磁盘IO?
  2. linux shell编程之菜单选择(二)
  3. gcc compiler warning: “will be initialized after/when initialized here”
  4. 好文推荐 | 从数据的属性看数据资产
  5. 周鸿祎:物联网时代的三大威胁
  6. 关于运行jar包时的一个错误
  7. TP5.1 查询数据库中上一条和下一条记录
  8. html5结构 客户端缓存,Javascript--离线应用与客户端储存
  9. NOIP201103瑞士轮【B002】
  10. 让 orangepi 用上Btsync(资源分享工具)好资源不怕和谐!
  11. ABAQUS装配节点建模教程
  12. BP神经网络算法基本原理,bp神经网络算法详解
  13. 丁向荣单片机pdf_《单片机原理与应用 --基于可在线仿真的STC15F2K60S2单片机》 丁向荣、陈崇辉 【正版电子纸书阅读_PDF下载】- 书问...
  14. STM32F103ZET6---【硬件篇】定时器
  15. B-JUI 实践 之 带搜索与编辑的Datagrid
  16. Triplet-Graph Reasoning Network for few-shot Metal Generic Surface Defect Segmentation论文理解
  17. 淘客订单检测接口--检测淘宝订单是否是淘客订单的接口
  18. VM的三种网络连接方式
  19. 【apache lang3】import org.apache.commons.lang3.StringUtils error----Cannot resolve symbol ‘lang3‘
  20. 时序逻辑滞后一拍问题

热门文章

  1. 1005 继续(3n+1)猜想 (25 分)
  2. 微软同步框架入门之四--冲突(Conflict)检测和处理
  3. Python题库——题目
  4. 2020ICPC上海E The Journey of Geor Autumn
  5. 编程:5 位评委对参赛选手进行打分,将所有的打分结果存储在对应类型的数组中,将所有评分结果 去除一个最低分,去除一个最高分,然后获取剩余 3 位评委的平均分数为选手的最终得分。设计程序, 用键盘输入
  6. Android WebView加载完成的监听
  7. 牛客网sql练习题解(12-21)
  8. 移动GPU渲染原理的流派——IMR、TBR及TBDR
  9. PHP实现对小程序微信支付v2订单的结果查询
  10. 阿里云DataHub常见问题