计算机网络:套接字(Socket)| Python socket实现服务器端与客户端通信,使用TCP socket阿里云ECS服务器与本机通信
所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口。
1.套接字的功能
传输层真正连接的是套接字,通过套接字将数据发送给特定的进程。套接字位于传输层及应用层之间,是一个应用编程接口,应用程序通过调用此接口进行传输接收数据。
传输层如何标识套接字:通过ip地址+端口号标识套接字,套接字绑定了主机端口号,ip地址对应相应的主机,进程监控相应端口
注意:一台主机上一个端口号只能对应一个进程,一个进程可以监控多个端口
所以网上给的定义:套接字=ip地址+端口号,ip地址及端口号会封装到传输层的数据(报文)中
2.调用套接字API的过程
基于TCP传输层协议

譬如Python的socket库,服务端
1 # -*- coding: utf-8 -*-
2 import socket
3 import sys
4 def socket_service_data():
5 name = socket.gethostname()
6 HOST = socket.gethostbyname(name) # 获取阿里云服务器私网IP,使用ifconfig可查询
7 PORT = 60000 #安全组中设置
8 try:
9 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
10 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
11 # s.bind(('127.0.0.1', 6666)) # 在同一台主机的ip下使用测试ip进行通信
12 s.bind((HOST, PORT)) #在不同主机或者同一主机的不同系统下使用实际ip
13 s.listen(10)
14 except socket.error as msg:
15 print(msg)
16 sys.exit(1)
17
18 print("Wait for Connection..................")
19
20 while True:
21 sock, addr = s.accept()
22 buf = sock.recv(1024) #接收数据
23 buf = buf.decode() #解码
24 print("The data from " + str(addr[0]) + " is " + str(buf))
25 print("Successfully")
26 # return buf
27 sock.close()
28 if __name__ == '__main__':
29 socket_service_data()
客户端
1 import socket
2 import sys
3 def sock_client_data():
4 while True:
5 try:
6 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
7 s.connect(('192.168.112.8', 60000)) #服务器和客户端在不同的系统或不同的主机下时使用的ip和端口,首先要查看服务器所在的系统网卡的ip
8 # s.connect(('127.0.0.1', 6666)) #服务器和客户端都在一个系统下时使用的ip和端口
9 except socket.error as msg:
10 print(msg)
11 print(sys.exit(1))
12 data = input("input data:") #输入要传输的数据
13 s.send(data.encode()) #将要传输的数据编码发送,如果是字符数据就必须要编码发送
14 s.close()
15 if __name__ == '__main__':
16 sock_client_data()
基于UDP传输层协议

常用的Socket API函数
- scoket():创建并返回套接字
- bind():套接字绑定本地端口
3.套接字的分类
主要是根据传输层两个协议划分的:
1.流式套接字。基于TCP,TCP协议是将数据看作无记录无边界的字节流,实现数据无差错、无重复的传输。所以称接受此类数据的套接字为流式套接字,内设流量控制。
2.数据报套接字。基于UDP,数据包以独立的形式发送传输过程数据可能被丢失。所以称接收此类数据的套接字为数据报套接字。
3.原始套接字。该套接字允许对较低层协议(如IP或ICMP)进行直接访问。基本上很少用。
参考:https://blog.csdn.net/shang_0122/article/details/104273944
计算机网络:套接字(Socket)| Python socket实现服务器端与客户端通信,使用TCP socket阿里云ECS服务器与本机通信的更多相关文章
- 阿里云ECS服务器socket无法连接的问题
把自己的项目部署到阿里云ecs服务器之后,只有127.0.0.1才能连接到服务器端,检查了阿里云安全组规则,以及socket绑定的地址无误后,发现没有开启服务器防火墙的对应端口. firewall-c ...
- 使用sshtunnel实现python公网连接阿里云mongo服务器
背景: 公司使用阿里云的云数据库MongoDB.基于安全原因考虑,阿里云MongoDB云数据库目前只支持从阿里云ECS上访问,无法通过公网直接访问,不方便用户在本地开发环境里直接进行测试. 阿里云官方 ...
- C#编程 socket编程之udp服务器端和客户端
基于Udp协议是无连接模式通讯,占用资源少,响应速度快,延时低.至于可靠性,可通过应用层的控制来满足.(不可靠连接) 使用Udp协议通讯需要具备以下几个条件: (1).建立一个套接字(Socket) ...
- Python pip 下载速度慢? Windows 设置 国内源,用 阿里云 国内镜像 加速
pip 提供了对 Python 包的查找.下载.安装.卸载的功能,是非常方便的 Python 包管理工具.但是,令人苦恼的是 pip 在国内的下载速度非常慢,速度常常只有每秒几十 K,甚至才几 K,小 ...
- 手把手教你如何在阿里云ECS搭建Python TensorFlow Jupyter
前段时间在阿里云买了一台服务器,准备部署网站,近期想玩一些深度学习项目,正好拿来用.TensorFlow官网的安装仅提及Ubuntu,但我的ECS操作系统是 CentOS 7.6 64位,搭建Pyth ...
- 170925_2 Python socket 创建UDP的服务器端和客户端
[python版本]3.6 UDP服务器端: from socket import * from time import ctime host = '' port = 21567 buf_size = ...
- 阿里云ECS在CentOS 6.9中使用Nginx提示:nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)的解决方法
说明: 1.[::]:80这个是IPv6的地址. 2.阿里云截至到今天还不支持IPv6. 解决方式: 1.普通解决方式:开启IPv6的支持,不过这个方法在阿里云行不通. vim /etc/nginx/ ...
- 阿里云收集服务器性能指标的python脚本
#!/usr/bin/python ######################################### # Function: sample linux performance ind ...
- Python/dotNET Redis服务连接客户端调用SET方法的同时获取Redis服务器返回的内容
在用Python或dotNET redis客户端连接redis服务器的时候,当你调用客户端的SET方法后同时还想得到其返回的字符串,那么需要处理一下. 1. Redis Python redis客户端 ...
随机推荐
- suse 12 安装git客户端
suse-linux:~ # zypper addrepo http://download.opensuse.org/repositories/devel:/tools:/scm/SLE_12_SP5 ...
- EasyX库简单中文手册
EasyX库简单中文手册 作者: 时间: 2021/2/2 第一个例程 #include <graphics.h> // 图像相关库 #include <conio.h> // ...
- (翻译) CAP 理论 FAQ
CAP 理论 FAQ 0. 关于这个文档 没有其它比CAP理论更引人注意的话题了, 这个FAQ的目的, 是说明对于CAP, 当前哪些是已知的, 并帮助那些刚接触这个理论的人快速了解, 并解决一些错误的 ...
- 【计理01组04号】JDK基础入门
java.lang包 java.lang包装类 我们都知道 java 是一门面向对象的语言,类将方法和属性封装起来,这样就可以创建和处理相同方法和属性的对象了.但是 java 中的基本数据类型却不是面 ...
- 网络测试技术——802.1X_MD5认证(下篇)
上篇我们讲到802.1X_MD5的简介.认证过程.测试组网以及测试环境准备,本期我们将为大家带来测试的详细步骤: 六.测试仪配置 1.占用端口 端口功能 (1)端口1用来模拟DOT1X和发送流量 (2 ...
- 目前数据可视化工具排名如何?好用的BI可视化软件
数据可视化用专业术语来就是通过视觉的方式向人类展示数据,这种在文本基础上的图表即简单又实用,而且相关性.趋势分析都非常明确,也非常可靠,通过图表一目了然.用通俗的话说就是画一张图表,将数据以比例的方式 ...
- 企业如何建立一体化数据分析平台?还是得说说那几家BI工具
近年来,BI工具和报表工具犹如一股春风,吹遍了大江南北,成为了众多企业的发展利器,受到了企业决策者的拥戴.同时,在企业信息化需求日益旺盛的市场里也孕育了不少BI工具与报表工具厂商.商业智能的应用在国外 ...
- RDD的运行机制
1. RDD 的设计与运行原理 Spark 的核心是建立在统一的抽象 RDD 之上,基于 RDD 的转换和行动操作使得 Spark 的各个组件可以无缝进行集成,从而在同一个应用程序中完成大数据计算任务 ...
- eclipse gradle创建java项目
参考: https://blog.csdn.net/weixin_33733810/article/details/92438913 一 : 需要在 https://gradle.org/releas ...
- PyTorch深度学习实践——多分类问题
多分类问题 目录 多分类问题 Softmax 在Minist数据集上实现多分类问题 作业 课程来源:PyTorch深度学习实践--河北工业大学 <PyTorch深度学习实践>完结合集_哔哩 ...