计算机网络之Socket编程

简介: 计算机网络之Socket编程



前言

TCP、UDP套接字编程


一、Socket编程

应用进程使用传输层提供的服务才能够交换报文,实现应用协议,实现应用

  • TCP/IP:应用进程使用Socket API访问传输服务
  • 地点:界面上的SAP(Socket)方式:Socket API
  • 目标:学习如何构建能借助sockets进行通信的C/S应用程序
  • socket:分布式应用进程之间的门,传输层协议提供的端到端服务接口

2种传输层服务的socket类型:

  • TCP:可靠的、字节流的服务
  • UDP:不可靠(数据UDP数据报)服务

二、TCP套接字编程

  • 套接字:应用进程与端到端传输协议(TCP或UDP)之间的门户
  • TCP服务:从一个进程向另一个进程可靠地传输字节流

服务器首先运行,等待连接建立

  • 1:服务器进程必须先处于运行状态
  • 创建欢迎socket
  • 和本地端口捆绑
  • 在欢迎socket上阻塞式等待接收用户的连接

客户端主动和服务器建立连接:

  • 2:创建客户端本地套接字(隐式捆绑到本地port)
  • 指定服务器进程的P地址和端口号,与服务器进程连接
  • 4:连接API调用有效时,客户端P与服务器建立了TCP连接
  • 3:当与客户端连接请求到来时
  • 服务器接受来自用户端的请求,解除阻塞式等待,返回一个新的socket(与欢迎socket不一样),与客户端通信
  • 允许服务器与多个客户端通信
  • 使用源IP和源端口来区分不同的客户端

从应用程序的角度

  • TCP在客户端和服务器进程之间提供了可靠的、字节流(管道)服务

TCP Socket编程

C/S模式的应用样例:

  • 1)客户端从标准输入装置读取一行字符,发送给服务器
  • 2)服务器从socket读取字符
  • 3)服务器将字符转换成大写,然后返回给客户端
  • 4)客户端从socket中读取一行字符,然后打印出
  • 实际上,这里描述了C-S之间交互的动作次序

三、UDP套字编程

  • UDP:在客户端和服务器之间没有连接
  • 没有握手
  • 发送端在每一个报文中明确地指定目标的IP地址和端口号
  • 服务器必须从收到的分组中提取出发送端的IP地址和端口号
  • UDP:传送的数据可能乱序,也可能丢失
  • 进程视角看UDP服务
  • UDP为客户端和服务器提供不可靠的字节组的传送服务


总结

  • 应用程序体系结构
  • 客户-服务器
  • P2P
  • 混合
  • 应用程序需要的服务品质描述:
  • 可靠性、带宽、延时、安全
  • Internet传输层服务模式
  • 可靠的、面向连接的服务:TCP
  • 不可靠的数据报:UDP
  • 流行的应用层协议:
  • HTTP
  • FTP
  • SMTP,POP,IMAP
  • DNS
  • Socket编程
  • 应用层协议报文类型:请求/响应报文:
  • 客户端请求信息或服务
  • 服务器以数据、状态码进行响应
  • 报文格式:
  • 首部:关于数据信息的字段
  • 数据:被交换的信息
  • 控制报文vs.数据报文
  • 带内、带外
  • 集中式vs.分散式
  • 无状态vs.维护状态
  • 可靠的vs.不可靠的报文传输
  • 在网络边缘处理复杂性

一个协议定义了在两个或多个通信实体之间交换报文的格式和次序、以及就一条报文传输和接收或其他事件采取的动作

相关文章
|
16天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
16天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
20天前
|
网络协议 程序员 Python
pythonTCP客户端编程创建Socket对象
【4月更文挑战第6天】本教程介绍了TCP客户端如何创建Socket对象。Socket作为网络通信的基础单元,包含协议、IP地址和端口等信息。在TCP/IP中,Socket分为流式(TCP)、数据报(UDP)和原始套接字。以Python为例,创建TCP Socket对象需调用`socket.socket(AF_INET, SOCK_STREAM)`。为确保健壮性,应使用异常处理处理可能的`socket.error`。学习本教程将帮助你掌握TCP客户端创建Socket对象的技能。
|
1月前
|
网络协议 Linux C语言
Linux实现socket网络通信
Linux实现socket网络通信
|
15天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
39 6
|
3天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
15天前
|
网络协议 Java API
Python网络编程基础(Socket编程)Twisted框架简介
【4月更文挑战第12天】在网络编程的实践中,除了使用基本的Socket API之外,还有许多高级的网络编程库可以帮助我们更高效地构建复杂和健壮的网络应用。这些库通常提供了异步IO、事件驱动、协议实现等高级功能,使得开发者能够专注于业务逻辑的实现,而不用过多关注底层的网络细节。
|
19天前
|
Python
Python网络编程基础(Socket编程)UDP服务器编程
【4月更文挑战第8天】Python UDP服务器编程使用socket库创建UDP套接字,绑定到特定地址(如localhost:8000),通过`recvfrom`接收客户端数据报,显示数据长度、地址和内容。无连接的UDP协议使得服务器无法主动发送数据,通常需应用层实现请求-响应机制。当完成时,用`close`关闭套接字。
|
1月前
|
网络协议 Perl
Perl 教程 之 Perl Socket 编程 6
Perl Socket教程展示了如何进行网络通信。服务端(server.pl)创建一个TCP套接字,绑定到端口7890并监听,接收客户端连接并发送消息。客户端(client.pl)连接到服务端,接收并打印消息。在两个不同终端上分别运行服务端和客户端可实现交互。
24 2
|
1月前
|
网络协议 Perl
Perl 教程 之 Perl Socket 编程 1
Perl Socket教程介绍了如何进行服务端和客户端编程。服务端使用socket、bind、listen和accept函数建立并监听连接;客户端则通过socket和connect函数连接到服务端。socket函数创建套接字,参数包括协议集(如AF_INET)、套接字类型(如SOCK_STREAM)和传输协议(如TCP)。示例代码展示了如何在Perl中调用socket函数。
17 3