计算机网络:套接字(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客户端 ...
随机推荐
- Solution -「多校联训」取石子游戏
\(\mathcal{Description}\) Link. 有 \(n\) 堆石子,第 \(i\) 堆有 \(x_i\) 个,Alice 每次只能从这堆中拿走 \(a_i\) 个石子,Bo ...
- WPF + Winform 解决管理员权限下无法拖放文件的问题
wpf,winform混合解决管理员权限无法拖放文件的问题 学习自: https://zhuanlan.zhihu.com/p/343369663 https://zhuanlan.zhihu.com ...
- 利用DP-SSL对少量的标记样本进行有效的半监督学习
作者 | Doreen 01 介绍 深度学习之所以能在图像分类.自然语言处理等方面取得巨大成功的原因在于大量的训练数据得到了高质量的标注. 然而在一些极其复杂的场景(例如:无人驾驶)中会产生海量的数据 ...
- 继承及super关键字
继承 继承的本质是对某一批类的抽象,从而实现对世界更好的建模 extend的意思是"扩展",子类是父类的扩展. Java中类只有单继承,没有多继承:儿子只能有一个亲生爸爸,一个爸爸 ...
- mysql学习+再复习
mysql 函数 单行函数 exists 是否存在 字符函数 concat(a,b)拼接两个字符串 ifnull(a+b,0) 如果a+b等于null,则返回0 upper,lower 大小写 ...
- 【Elastic-1】ELK基本概念、环境搭建、快速开始文档
TODO 快速开始文档 SpringBoot整合ELK(Logstash收集日志.应用主动向ES写入) ELK接入Kafka 基本概念 ElasticSearch 什么是ElasticSearch? ...
- 图片隐写之Image Steganography软件的使用
CTF_论剑场 MISC 坏掉的图像 writeup 把图片丢进winhex里,发现头部的 0D 1A 0A 1A是不正确的,正确的应该为 0D 0A 1A 0A,所以需要更改. 更改完成后打开图片可 ...
- 网络测试仪实操手册 RENIX 机框管理
本文主要阐述信而泰BIGTAO系列 网络测试仪器机框相关操作方法.文章分为机框添加.机框删除.机框重启.机框关机四部分. 第一部分:机框添加 1.添加过程 1.1打开软件 1.2添加端口 1.3输入I ...
- 还在争论WPS、Office哪个更好用?这款云办公工具才是真的香!
最近,金山WPS更新狠狠的刷了一波存在感.尤其是xlookup函数,着实是有被惊艳到,也让大家看到了国产办公软件的进步.甚至有人认为WPS已经超越了传统的办公软件--微软office.WPS的优点固然 ...
- 商业智能bi行业现状,BI应用的3个层次
商业智能bi行业现状.传统的报表系统技术上已经相当成熟,大家熟悉的Excel等都已经被广泛使用.但是,随着数据的增多,需求的提高,传统报表系统面临的挑战也越来越多. 1. 数据太多,信息太少 密密麻 ...