python socket编程2 - socket创建发送方所需参数的获得

使用socket进行进程间通信或者跨网络的计算机间通讯,有点类似日常生活中的发送快递。

根据发送方的需要,选择不同的物流公司:
在这里插入图片描述
在选择适合的公司和运输方式后,需要在app上做出选择,并根据要求填写一些信息。app会根据填写的信息,判断和提示是否可行。

比如,有液体的物品是不可以走空运的;
比如,当日达的物品是不能做到隐去发送方地址的;
比如,运送的物品重量大于3公斤,需要额外收取费用的;
比如,发送方不在同一个城市,当日达可能就无法使用。

发送双方的位置、以及寄送物品的某些性质,决定了可能选择的运送公司、运送方式、时限以及费用等。

socket编程也是如此。

发送方需要先确定一些参数,还要知道接受方的一些参数,然后选择合适的协议等内容。

好在 python socket 提供了一些可以直接使用的方法,方便使用者通过简单的方法调用,获得发送方需要使用的一些数据。

方法列举

  • def close(integer):
    close(integer) -> None
    
    Close an integer socket file descriptor.  
    This is like os.close(), but for sockets; 
    on some platforms os.close() won't work for socket file descriptors.
  • def dup(integer):
    dup(integer) -> integer
    
    Duplicate an integer socket file descriptor.  This is like os.dup(), but for  sockets; 
    on some platforms os.dup() won't work for socket file descriptors.
  • def getaddrinfo(host, port, family=None, type=None, proto=None, flags=None):
   getaddrinfo(host, port [, family, type, proto, flags])   -> list of (family, type, proto, canonname, sockaddr)
    
    Resolve host and port into addrinfo struct.

参考网址: https://www.man7.org/linux/man-pages/man3/getaddrinfo.3.html

  • def getdefaulttimeout():
    getdefaulttimeout() -> timeout
    
    Returns the default timeout in seconds (float) for new socket objects.
    A value of None indicates that new socket objects have no timeout.
    When the socket module is first imported, the default is None.
    默认是None.
  • def gethostbyaddr(host):
    gethostbyaddr(host) -> (name, aliaslist, addresslist)
    
    Return the true host name, a list of aliases, and a list of IP addresses, for a host.  
    The host argument is a string giving a host name or IP number.
  • def gethostbyname(host):
    gethostbyname(host) -> address
    
    Return the IP address (a string of the form '255.255.255.255') for a host.
  • def gethostbyname_ex(host):
    gethostbyname_ex(host) -> (name, aliaslist, addresslist)
    
    Return the true host name, a list of aliases, and a list of IP addresses, for a host.  
    The host argument is a string giving a host name or IP number.
  • def gethostname():
    gethostname() -> string
    
    Return the current host name.
  • def getnameinfo(sockaddr, flags):
    getnameinfo(sockaddr, flags) --> (host, port)
    
    Get host and port for a sockaddr.
  • def getprotobyname(name):
    getprotobyname(name) -> integer
    
    Return the protocol number for the named protocol.  (Rarely used.)
  • def getservbyname(servicename, protocolname=None):
    getservbyname(servicename[, protocolname]) -> integer
    
    Return a port number from a service name and protocol name.
    The optional protocol name, if given, should be 'tcp' or 'udp',   otherwise any protocol will match.
  • def getservbyport(port, protocolname=None):
    getservbyport(port[, protocolname]) -> string
    
    Return the service name from a port number and protocol name.
    The optional protocol name, if given, should be 'tcp' or 'udp', otherwise any protocol will match.
  • def htonl(integer):
    htonl(integer) -> integer
    
    Convert a 32-bit integer from host to network byte order.
  • def htons(integer):
    htons(integer) -> integer
    
    Convert a 16-bit unsigned integer from host to network byte order.
    Note that in case the received integer does not fit in 16-bit unsigned integer, 
    but does fit in a positive C int, it is silently truncated to 16-bit unsigned integer.
    However, this silent truncation feature is deprecated, and will raise an  exception in future versions of Python.
  • def if_indextoname(if_index):
    if_indextoname(if_index)
    
    Returns the interface name corresponding to the interface index if_index.
  • def if_nameindex():
    if_nameindex()
    
    Returns a list of network interface information (index, name) tuples.
  • def if_nametoindex(if_name):
    if_nametoindex(if_name)
    
    Returns the interface index corresponding to the interface name if_name.
  • def inet_aton(string):
    inet_aton(string) -> bytes giving packed 32-bit IP representation
    
    Convert an IP address in string format (123.45.67.89) to the 32-bit packed  binary format used
    in low-level network functions.
  • def inet_ntoa(packed_ip):
    inet_ntoa(packed_ip) -> ip_address_string
    
    Convert an IP address from 32-bit packed binary format to string format
  • def inet_ntop(af, packed_ip):
    inet_ntop(af, packed_ip) -> string formatted IP address
    
    Convert a packed IP address of the given family to string format.
  • def inet_pton(af, ip):
    inet_pton(af, ip) -> packed IP address string
    
    Convert an IP address from string format to a packed string suitable  for use with low-level network functions.
  • def ntohl(integer):
    ntohl(integer) -> integer
    
    Convert a 32-bit integer from network to host byte order.
  • def ntohs(integer):
    ntohs(integer) -> integer
    
    Convert a 16-bit unsigned integer from network to host byte order.
    Note that in case the received integer does not fit in 16-bit unsigned  integer, but does fit in a positive C int,
     it is silently truncated to  16-bit unsigned integer.
    However, this silent truncation feature is deprecated, and will raise an  exception in future versions of Python.
  • def setdefaulttimeout(timeout):
    setdefaulttimeout(timeout)
    
    Set the default timeout in seconds (float) for new socket objects.
    A value of None indicates that new socket objects have no timeout.
    When the socket module is first imported, the default is None.

代码举例

  • 获得本地主机信息
def print_localhost_info():
    host_name = socket.gethostname()
    ip_addr = socket.gethostbyname(host_name)
    print("Host name: %s " % host_name)
    print("IP address: %s" % ip_addr)

Host name: DESKTOP-DEVTEAM
IP address: 192.168.56.1

  • 获得外网站点信息
def print_remote_website_info():
    remote_host = 'www.pythons.org'
    try:
        print("IP address: %s" % socket.gethostbyname(remote_host))
    except socket.error as err_msg:
        print("%s: %s" % (remote_host, err_msg))

IP address: 72.14.178.174

  • 输出默认超时时间
def print_default_timeout():
    print("Default timeout :", socket.getdefaulttimeout())

Default timeout : None

  • 根据网址获得主机名、别名列表、IP列表
def print_host_by_addr():
    print("Host address :", socket.gethostbyaddr('www.pythons.org'))

Host address : (‘li40-174.members.linode.com’, [], [‘72.14.178.174’])

  • 输出本地主机网卡信息
def print_network_interface():
    print(socket.if_nameindex())

[(22, ‘ethernet_0’), (23, ‘ethernet_1’), (24, ‘ethernet_2’), (25, ‘ethernet_3’), (26, ‘ethernet_4’), (27, ‘ethernet_5’), (28, ‘ethernet_6’), (29, ‘ethernet_7’), (30, ‘ethernet_8’), (31, ‘ethernet_9’), (32, ‘ethernet_10’), (33, ‘ethernet_11’), (43, ‘ethernet_12’), (44, ‘ethernet_13’), (45, ‘ethernet_14’), (46, ‘ethernet_15’), (47, ‘ethernet_16’), (48, ‘ethernet_17’), (49, ‘ethernet_18’), (50, ‘ethernet_19’), (51, ‘ethernet_20’), (12, ‘ethernet_32768’), (15, ‘ethernet_32769’), (2, ‘ethernet_32770’), (9, ‘ethernet_32771’), (21, ‘ethernet_32772’), (7, ‘ethernet_32773’), (14, ‘ethernet_32774’), (20, ‘ethernet_32775’), (6, ‘ethernet_32776’), (8, ‘ppp_32768’), (1, ‘loopback_0’), (34, ‘wireless_0’), (35, ‘wireless_1’), (36, ‘wireless_2’), (37, ‘wireless_3’), (38, ‘wireless_4’), (39, ‘wireless_5’), (40, ‘wireless_6’), (41, ‘wireless_7’), (42, ‘wireless_8’), (52, ‘wireless_9’), (53, ‘wireless_10’), (54, ‘wireless_11’), (55, ‘wireless_12’), (56, ‘wireless_13’), (57, ‘wireless_14’), (58, ‘wireless_15’), (59, ‘wireless_16’), (60, ‘wireless_17’), (61, ‘wireless_18’), (18, ‘wireless_32768’), (19, ‘wireless_32769’), (11, ‘wireless_32770’), (13, ‘tunnel_32512’), (5, ‘tunnel_32513’), (3, ‘tunnel_32514’), (16, ‘tunnel_32768’), (4, ‘tunnel_32769’), (17, ‘tunnel_32770’), (10, ‘tunnel_32771’)]

  • 根据网络接口的索引获取名字
def print_network_interface_name():
    print(socket.if_indextoname(22))

ethernet_0

  • 根据域名获取远程主机IP
def get_remote_hostbyname():
    print(socket.gethostbyname('www.pythons.org'))

45.33.18.44

  • 根据域名获取远程主机更多信息,返回主机域名、别名列表和IP列表
def get_remote_hostbyname_ex():
    print(socket.gethostbyname_ex('www.pythons.org'))

(‘www.pythons.org’, [], [‘45.33.18.44’, ‘96.126.123.244’, ‘45.33.23.183’, ‘45.33.2.79’, ‘173.255.194.134’, ‘45.33.30.197’, ‘45.79.19.196’, ‘45.33.20.235’, ‘72.14.185.43’, ‘45.56.79.23’, ‘198.58.118.167’, ‘72.14.178.174’])

  • 获取远程主机信息
def getaddrinfo():
    info = socket.getaddrinfo("www.pythons.org", 80, proto=socket.IPPROTO_TCP)
    print(info)

[(<AddressFamily.AF_INET: 2>, 0, 6, ‘’, (‘45.33.18.44’, 80)), (<AddressFamily.AF_INET: 2>, 0, 6, ‘’, (‘96.126.123.244’, 80)), (<AddressFamily.AF_INET: 2>, 0, 6, ‘’, (‘45.33.23.183’, 80)), (<AddressFamily.AF_INET: 2>, 0, 6, ‘’, (‘45.33.2.79’, 80)), (<AddressFamily.AF_INET: 2>, 0, 6, ‘’, (‘173.255.194.134’, 80)), (<AddressFamily.AF_INET: 2>, 0, 6, ‘’, (‘45.33.30.197’, 80)), (<AddressFamily.AF_INET: 2>, 0, 6, ‘’, (‘45.79.19.196’, 80)), (<AddressFamily.AF_INET: 2>, 0, 6, ‘’, (‘45.33.20.235’, 80)), (<AddressFamily.AF_INET: 2>, 0, 6, ‘’, (‘72.14.185.43’, 80)), (<AddressFamily.AF_INET: 2>, 0, 6, ‘’, (‘45.56.79.23’, 80)), (<AddressFamily.AF_INET: 2>, 0, 6, ‘’, (‘198.58.118.167’, 80)), (<AddressFamily.AF_INET: 2>, 0, 6, ‘’, (‘72.14.178.174’, 80))]

  • 参考网址:
    https://docs.python.org/3/library/socket.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/149152.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

tsmc12 nm boundary cell注意事项

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 往期文章导读: boundary cell添加失败问题整理 注意N/P的区别 针对上下两边的boundary cell,有N/P类型的区别,看版图衬底形状上下是不对称的,而且P

Mac M3 芯片安装 Nginx

Mac M3 芯片安装 Nginx 一、使用 brew 安装 未安装 brew 的可以参考 【Mac 安装 Homebrew】 或者 【Mac M2/M3 芯片环境配置以及常用软件安装-前端】 二、查看 nginx 信息 通过命令行查看 brew info nginx可以看到 nginx 还未在本地安装&#xff0c;显示 Not installed …

白帽黑客一般一个月收入多少?

最近有人问我&#xff0c;像我们这种白帽黑客&#xff0c;一个月能赚多少&#xff1f;其实啊&#xff0c;网上那种搞盗号或做挂的&#xff0c;都不算正经的黑客&#xff0c;真正的黑客绝对不会干这种事情&#xff0c;因为搞这种事都会涉及违法入侵、破坏计算机系统。 先不说赚…

C++ Qt 学习(八):Qt 绘图技术与图形视图

1. 常见 18 种 Qt 绘图技术 1.1 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <memory> #include <QTreeView> #include "CPaintWidget.h"using namespace std;class Widget : public QWidget {Q_OBJECTpublic:Widget…

LOWORD, HIWORD, LOBYTE, HIBYTE的解释

文章目录 实验结论 实验 int 类型大小正常为4Byte 以小端序来看 0x12345678在内存中的存储为 0x78 0x56 0x34 0x120x78在低地址&#xff0c;0x12在高地址 程序输出 #include <stdio.h> #include <string.h> #include<windows.h>int main() {int a 0x12345…

d3dcompiler_43.dll丢失了怎么办,详细解答和d3dcompiler_43.dll修复方法

以下将为您提供几种处理d3dcompiler_43.dll文件丢失的解决措施&#xff0c;这些方法实用有效&#xff0c;可以帮助我们恢复计算机运行。 一.d3dcompiler_43.dll是什么 在我们开始探讨如何修复d3dcompiler_43.dll文件丢失的问题之前&#xff0c;首先需要了解这个文件的作用。该…

现场直击!触想智能亮相德国2023 SPS展会

当地时间11月14日上午9时 2023 年(德国)纽伦堡国际工业自动化及元器件展览会 SPS 展(以下简称&#xff1a;SPS展会)正式拉开帷幕&#xff0c;触想智能与来自全球各地的领先科技公司及前沿业者齐聚盛会&#xff0c;共赴一场科技与创新交汇的“饕餮盛宴”。 △ 2023 SPS展会开幕(…

可怕!.Net 8正式发布了,.Net野心确实不小!

随着三天.NET Conf 2023的会议结束了&#xff0c;.Net 8正式发布了。 .Net 8是官方号称有史以来性能最快的一个版本了。 .Net 8 增加了数以千计的性能、稳定性和安全性改进&#xff0c;以及平台和工具增强功能&#xff0c;有助于提高开发人员的工作效率和创新速度。 反正就是…

载誉前行 | 求臻医学MRD检测方案荣获金如意奖·卓越奖

2023年11月11日 由健康界、海南博鳌医学创新研究院 中国医药教育协会数字医疗专业委员会联合主办的 第三届“金如意奖”数字医疗优选解决方案 评选颁奖典礼 在2023中国医院管理年会上揭晓榜单并颁奖 求臻医学MRD检测解决方案 荣获第三届金如意奖最高奖项——卓越奖 这一…

ROS stm32 CAN通信

文章目录 运行环境&#xff1a;原理1.1 ros中的代码1)socketcan_bridge2)测试的ros-python包3)keil5中数据解析4)USB-CAN连接5)启动指令 运行环境&#xff1a; ubuntu18.04.melodic STM32&#xff1a;DJI Robomaster C板 ROS&#xff1a;18.04 硬件&#xff1a;USB-CAN&#x…

Vue修饰符(Vue事件修饰符、Vue按键修饰符)

目录 前言 Vue事件修饰符 列举较常用的事件修饰符 .stop .prevent .capture .once Vue按键修饰符 四个特殊键 获取某个键的按键修饰符 前言 本文介绍Vue修饰符&#xff0c;包括Vue事件修饰符以及按键修饰符 Vue事件修饰符 列举较常用的事件修饰符 .stop: …

Oneid方案

一、前文 用户画像的前提是标识出用户&#xff0c;存在以下场景&#xff1a;不同业务系统对同一个人的标识&#xff0c;匿名用户行为的行为归因&#xff1b;本文提供多种解决方案&#xff0c;提供大家思考。 二、方案矩阵 三、其他 相关连接&#xff1a; 如何通过图算法能力获…

ChatGPT助力高效办公——神奇的效率工具Airy

Airy是一款免费而又强大的高效办公软件&#xff0c;用户可以通过快捷键和丰富的内置插件&#xff0c;充分发挥GPT-3.5模型的强大功能&#xff0c;轻松实现搜索、翻译、文本生成与写作、文本概括与总结&#xff0c;同时还可以作为一款日程提醒工作&#xff0c;记录和提醒每天要做…

day17_多线程基础

今日内容 零、 复习昨日 一、作业 二、进程与线程 三、创建线程 四、线程的API 一、复习 IO流的分类 方向: 输入,输出类型: 字节(XxxStream),字符(XxxReader,XxxWriter)字节输入流类名: FileInputStream字节输出流类名: FileOutputStream字符输入流类名: FileReader字符输出流类…

为什么说MES管理系统是车间层与管理层的桥梁

随着制造业的快速发展&#xff0c;企业对于生产过程中的管理要求越来越高。为了满足这一需求&#xff0c;MES生产管理系统应运而生。MES管理系统作为车间层与管理层之间的桥梁&#xff0c;扮演着至关重要的角色。本文将探讨为什么说MES管理系统是车间层与管理层之间的桥梁。 一…

基础课4——客服中心管理者面临的挑战

客服管理者在当今的数字化时代也面临着许多挑战。以下是一些主要的挑战&#xff1a; 同行业竞争加剧&#xff1a;客服行业面临着来自同行业的竞争压力。为了获得竞争优势&#xff0c;企业需要不断提高自身的产品和服务质量&#xff0c;同时还需要不断降低成本、提高效率。然而…

彩虹桥架构演进之路-性能篇

一、前言 一年前的《彩虹桥架构演进之路》侧重探讨了稳定性和功能性两个方向。在过去一年中&#xff0c;尽管业务需求不断增长且流量激增了数倍&#xff0c;彩虹桥仍保持着零故障的一个状态&#xff0c;算是不错的阶段性成果。而这次的架构演进&#xff0c;主要分享一下近期针对…

【经验记录】Ubuntu系统安装xxxxx.tar.gz报错ImportError: No module named setuptools

最近在Anaconda环境下需要离线状态&#xff08;不能联网的情况&#xff09;下安装一个xxxxx.tar.gz格式的包&#xff0c;将对应格式的包解压后&#xff0c;按照如下命令进行安装 sudo python setup.py build # 编译 sudo python setup.py install # 安装总是报错如下信息&am…

竞赛 题目:基于大数据的用户画像分析系统 数据分析 开题

文章目录 1 前言2 用户画像分析概述2.1 用户画像构建的相关技术2.2 标签体系2.3 标签优先级 3 实站 - 百货商场用户画像描述与价值分析3.1 数据格式3.2 数据预处理3.3 会员年龄构成3.4 订单占比 消费画像3.5 季度偏好画像3.6 会员用户画像与特征3.6.1 构建会员用户业务特征标签…