《如何实现网络编程》

  • 获取网络地址

(1)获取本地主机地址(使用InetAddress对象)

4e89be476bfa4de0bec87c966b6db630.png

(2)获取指定域名主机地址(使用InetAddress数组对象)

f6348d3aa3ee41c59791f84c56b43bd6.png

**注意: 记得处理getAllByName的编译时异常,否则会报错!!!

  • 案例1:心跳网络监测(简陋版)

思 路: 类似于计算机网络中的ping命令,监测网络联通性

(1)获取当前应用程序的"运行时rt"(运行时可理解为一个遥控器,用它来向操作系统发送要执行的命令)

(2)rt调用exec()方法,向操作系统发送要执行的命令,并抛出编译时异常IOException。e1898aecf4ea4aad9345fbda8e810d5f.png

(3)通过process进程对象的输入流(InputStream),"读取"执行结果,使用循环进行整行读取。

072eb1e540024dfa93ebaa1bb43b661a.png

**注意:读取的是字节流,是数字(看不懂),在这里我们需要把它转换为字符流,并将其写入字符输入流缓冲区,提高读取效率。

  • 基于TCP协议点对点连接的(客户端<--->服务端)

  • 服务端(首先启动,等待客户端连接)

(1)创建服务端Socket对象,监听8848端口;服务器启动,并进入"等待状态",等待某一个客户端的连接,当没有出现客户端连接时,accept()处于等待阻塞状态;若发现客户端连接,则返回当前正在连接的客户端。

(2)clientSocket调用getInetAddress()方法获取到当前客户端的网络地址。

(3)通过BufferReader来读取客户端发送过来的数据信息(将字节流转换为字符流)。

96fcfa5d9a624ff8922030803c215640.png

  • 客户端(在服务端启动后,向服务端发送一个连接的请求)

(1)创建客户端Socket对象,连接指定ip和端口;并依据客户端对象创建一个输出流,并将字节流转换为字符流。

(2)调用write()方法将内容写入缓冲区即内存中,但此时还未向服务端发送请求,要发送请求,还需调用flush()方法。

dc870c21135748b382552d2b26227014.png

**注意:clientSocket必须关闭,不允许长期占用,不关闭会报错。

此时运行,终端窗口则会出现:

ceec01b0bd06497e8f74273398f67f26.png

  • 案例2:人工机器对答程序

  • 服务端

(1)创建一个HashMap集合,里面每一项均有问题及其答案信息。

92363a0920094b929d9ebde0fef3b98f.png

(2)创建正在连接的客户端Socket和正在连接的客户端的主机地址clientIp。创建输入流对象和输出流对象,用来读取来自客户端传来的"问题"和在集合中查找后将问题的答案输出至"客户端"。

de3938cb311b4fe4948765235f3cb1f5.png

**注意:输入流--->读取客户端发送的问题(input和reader)

              输出流--->发送问题的答案给客户端(output和writer)

  • 客户端

(1)读取控制台输入的问题,创建输入流(BufferedReader使读取更加的高效)、输出流和Socket,向服务端发送"问题"。

24c005382df84c41b086c6eadb122528.png

(2)暂时关闭输出流,并接受服务端返回的答案(整行读取)。

854ee177a3ea43d9a4a617cc08a21e55.png

  • 本地图片的上传(客户端<--->服务端)

  • 服务端

(1)创建服务端Socket对象,调用了clientNetAddressgetHostAddress()方法。这个方法返回该IP地址的字符串表示形式。这个方法会查找字符串中所有的.字符,并将它们替换为-字符。.concat(".jpg")方法被调用来在转换后的字符串末尾添加".jpg"扩展名。

42ddbb20b3a044e1853de9f9f659d745.png

(2)创建从clientSocket获取的输入流in以及对InputStream in的一个包装流bis,增加了缓冲功能、用于将数据写入文件系统的输出流bos、以及向clientSocket的输出流写入字符数据的writer,它是对OutputStreamWriter的包装,将字符数据转换为字节数据。

a0fe7433ff1845768a9e5a65dd9fd1a6.png

(3)读取客户端上传的图片以及给客户端反馈信息

fc54f453067b4574b24aad5ebc6b1bc5.png

  • 客户端

(1)创建客户端Socket对象,连接指定ip和端口;读取本地图片;获取clientSocket输出流,通过此对象,向服务端发送数据。clientSocket.getInputStream()获取来自服务器端的响应信息(字节)。并处理相关异常。

896ad3eb3d134cae9faaaae64bf8e401.png

(2)循环遍历,将内容写入缓冲区,调用flush()方法,发送至网络。

e8354df0eef14dd1a2d507a27e2b2efa.png

**注意:一定要暂时关闭输出流 clientSocket.shutdownOutput(); !!!

  • 处理来自客户端的HTTP请求,并响应不同类型的内容

(1)使用BufferedReader从客户端的输入流中读取HTTP请求。

6483d82d843c46409ceecd2527f939d1.png

8221da61cca6476899cdafb3f14df82e.png

(2)使用BufferedWriter向客户端发送HTTP响应头和内容。这包括状态行、响应头(如Content-TypeContent-Length)以及实际的响应体(文本和HTML)。

5711ae78a2e543659e9a416cc0bafa95.png

(3)读取了一个名为“山川.jpg”的图片文件到字节数组imageBytes中。然后,它构造了一个HTTP响应,包括状态行、Content-Type头(指定响应内容为JPEG图像)、Content-Length头(指定响应体的长度)以及一个空行来分隔响应头和响应体。最后,它将图片数据写入到客户端的输出流中,并调用flush()方法确保所有数据都被发送出去。

cbf27a6a14f24b82b871c7d174880b64.png

  • 24
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Visual Studio 是一种集成开发环境(IDE),它提供了丰富的工具和功能来支持软件开发。通过 Visual Studio,开发人员可以使用不同的编程语言,如C++、C#、Python等,来实现各种功能,包括网络编程。 在 Visual Studio 中,我们可以使用不同的插件和库来实现网络编程。引用中提到了一个例子工程,这个工程实现了简单的面向连接的网络通信功能,包括服务器端和客户端。通过这个例子,我们可以学习如何使用 Visual Studio 来创建 TCP 服务器和客户端,并实现数据的发送和接收。 此外,引用中还提到了其他的网络编程需求,比如实现网络文字聊天和文件传输等功能。通过学习和实践,我们可以使用 Visual Studio 创建界面友好、操作简便的网络应用程序,满足不同的需求。 总结来说,Visual Studio 提供了丰富的工具和功能来支持网络编程。通过学习和实践,我们可以使用 Visual Studio 创建各种网络应用程序,实现不同的功能。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [TCP网络编程初学者工程示例 网络技术网管软件示例-C语言-VisualStudio2017解决方案-控制台程序](https://download.csdn.net/download/pdu2006/51960783)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [visual studio1. 实现网络文字聊天的基本功能,要求界面较为友好;](https://download.csdn.net/download/xuan_lu/10396131)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值