计算机网络:套接字(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客户端 ...
 
随机推荐
- python文件操作方式
			
一.文件操作 1.什么是文件 文件是操作系统暴露给用户能够快捷方便操作硬盘的快捷方式(接口) 2.代码如何操作文件 关键字:open() 三步走: 1.利用关键字open打开文件 2.利用其他方法操作 ...
 - Solution -「CF 1586F」Defender of Childhood Dreams
			
\(\mathcal{Description}\) Link. 定义有向图 \(G=(V,E)\),\(|V|=n\),\(\lang u,v\rang \in E \Leftrightarr ...
 - 主机磁盘使用率超过85%导致es索引变为只读模式
			
[ type=cluster_block_exception, reason=index [ index_name ] FORBIDDEN/12/index read-only / allow del ...
 - INTERSPEECH 2014 | 1-Bit Stochastic Gradient Descent and its Application to Data-Parallel Distributed Training of Speech DNNs
			
这篇文章之前也读过,不过读的不太仔细,论文中的一些细节并没有注意到.最近为了写开题报告,又把这篇论文细读了一遍.据笔者了解,这篇论文应该是梯度量化领域的开山之作,首次使用了梯度量化技术来降低分布式神经 ...
 - .NET 云原生架构师训练营(权限系统 系统演示 EntityAccess)--学习笔记
			
目录 模块拆分 EntityAccess 模块拆分 EntityAccess 实体权限 属性权限 实体权限 创建 student https://localhost:7018/Student/dotn ...
 - HTTP攻击与防范-PHP客户端脚本攻击
			
实验目的 了解客户端脚本植入攻击的方式 掌握防范攻击的方法 实验原理 了解客户端脚本植入攻击的方式 掌握防范攻击的方法 实验内容 了解客户端脚本植入攻击的方式 掌握防范攻击的方法 实验环境描述 1. ...
 - 完爆Excel!一个令人惊艳的数据展示工具,让你做图更轻松高效
			
数据展示应该是最常见的需求,我们经常利用数据做总结.用数据做分享.但是我们该如何更好地展示给我们需要展示的人,如何才能让我们的数据表达更加动人,这个值得让人思索. 说到数据表达,常用的数据展示方式无非 ...
 - win7下安装docker toolbox
			
我的笔记本是win10系统,上面安装docker非常简单.只要在官网下载然后一路next就可以了.然而办公室的电脑装的是win7,我也懒得给它换win10.没想到,win7下安装docker这么费劲. ...
 - HTML背景图加载过慢解决思路
			
压缩图片的大小 第一个压缩图片网站 第二个压缩图片网站
 - Spark on Yarn出现hadoop.compression.lzo.LzoCodec not found问题发现及解决
			
问题描述: spark.SparkContext: Created broadcast 0 from textFile at WordCount.scala:37 Exception in threa ...