Python中的socket网络模块介绍

目录
  • Socket
    • 服务端(server.py)
    • 客户端(client.py)
  • socket中的一些常用方法
  • Socket 对象(内建)方法
  • Python Internet 模块

前言:

Python3 提供了两个级别访问的网络服务:

  • 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法。
  • 高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。

Socket

Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

Python 中,我们使用 socket 模块的 socket 函数来创建一个 socket 对象。语法格式如下:

socket.socket ( family ,type ,proto)

参数;

  • family: 套接字家族可以使 AF_UNIX 或者 AF_INET
  • type: 套接字类型,可以根据是面向连接的 SOCK_STREAM 还是非连接的 SOCK_DGRAM
  • protocol: 一般不填,默认为 0

服务端(server.py)

import socket

server=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建socket对象,面向连接的
server.bind(("127.0.0.1",9999)) #绑定主机名和端口号
server.listen(10) #设置最大连接数,超过后排队
clientsock,addr=server.accept() #建立与客户端的连接,返回(socket object, address info)元组对象
print("addr=%s %s"%(addr,type(addr)))
print("客户端ip地址为:%s 端口号为:%s"%addr)
clientsock.send("欢迎来到服务端".encode('utf-8')) #python3要求发送byte型的数据,所以我们将它以utf-8的形式转换为bytes类型的
msg=clientsock.recv(1024) #接收客户端发来的消息,msg2为bytes类型的数据
print(msg.decode('utf-8')) #我们将bytes类型数据转换成str字符型的数据,以utf-8的形式
clientsock.close()

客户端(client.py)

import socket
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(("127.0.0.1",9999)) #connect函数接收元组型数据
msg=client.recv(1024) #接收从服务器发来的消息,为bytes类型的数据,大小为1024字节的缓冲区
print(msg.decode('utf-8')) #我们转化为str字符串类型的数据,以utf-8的形式
client.send("客户端到此一游".encode('utf-8')) #python3要求发送bytes类型的数据,所以我们得将它转换
client.close()

socket中的一些常用方法

import socket
a=socket.gethostname() #获得本机的主机名,返回str型数据
print(a,type(a))
b=socket.gethostbyname(a) #根据主机名获取ip地址,返回str型数据,也可以是网络上的域名
print(b,type(b))
c=socket.gethostbyaddr(b) #通过ip获得该主机的一些信息,返回tuple元组型数据
print(c,type(c))
#############################################
Win-10 <class 'str'>
192.168.56.1 <class 'str'>
('bogon', [], ['192.168.56.1']) <class 'tuple'>

Socket 对象(内建)方法


函数


描述


服务器端套接字


s.bind()


绑定地址(host,port)到套接字, 在AF_INET下,以元组(host,port)的形式表示地址。


s.listen()


开始TCP监听。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。


s.accept()


被动接受TCP客户端连接,(阻塞式)等待连接的到来


客户端套接字


s.connect()


主动初始化TCP服务器连接,。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。


s.connect_ex()


connect()函数的扩展版本,出错时返回出错码,而不是抛出异常


公共用途的套接字函数


s.recv()


接收TCP数据,数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略。


s.send()


发送TCP数据,将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。


s.sendall()


完整发送TCP数据,完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。


s.recvfrom()


接收UDP数据,与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。


s.sendto()


发送UDP数据,将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数。


s.close()


关闭套接字


s.getpeername()


返回连接套接字的远程地址。返回值通常是元组(ipaddr,port)。


s.getsockname()


返回套接字自己的地址。通常是一个元组(ipaddr,port)


s.setsockopt(level,optname,value)


设置给定套接字选项的值。


s.getsockopt(level,optname[.buflen])


返回套接字选项的值。


s.settimeout(timeout)


设置套接字操作的超时期,timeout是一个浮点数,单位是秒。值为None表示没有超时期。一般,超时期应该在刚创建套接字时设置,因为它们可能用于连接的操作(如connect())


s.gettimeout()


返回当前超时期的值,单位是秒,如果没有设置超时期,则返回None。


s.fileno()


返回套接字的文件描述符。


s.setblocking(flag)


如果flag为0,则将套接字设为非阻塞模式,否则将套接字设为阻塞模式(默认值)。非阻塞模式下,如果调用recv()没有发现任何数据,或send()调用无法立即发送数据,那么将引起socket.error异常。


s.makefile()


创建一个与该套接字相关连的文件

Python Internet 模块

以下是 Python 网络编程的一些重要模块:


协议


功能用处


端口号


Python 模块


HTTP


网页访问


80


httplib, urllib, xmlrpclib


NNTP


阅读和张贴新闻文章,俗称为"帖子"


119


nntplib


FTP


文件传输


20


ftplib, urllib


SMTP


发送邮件


25


smtplib


POP3


接收邮件


110


poplib


IMAP4


获取邮件


143


imaplib


Telnet


命令行


23


telnetlib


Gopher


信息查找


70


gopherlib, urllib

到此这篇关于Python中的socket网络模块介绍的文章就介绍到这了,更多相关Python socket内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python socket模块ftp传输文件过程解析

    这篇文章主要介绍了Python socket模块ftp传输文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 使用环境:python3,window环境,需要在头部声明# -*- coding:utf-8 -*- 实现功能: 将sever端所处文件夹的文件,传输到client端所处的文件夹中. 并且通过md5检测是否出错. 客户端命令的形式是: get 文件名 client处的新文件是 文件名.new ftp_sever.py impo

  • Python使用SocketServer模块编写基本服务器程序的教程

    SocketServer简化了网络服务器的编写.它有4个类:TCPServer,UDPServer,UnixStreamServer,UnixDatagramServer.这4个类是同步进行处理的,另外通过ForkingMixIn和ThreadingMixIn类来支持异步. 创建服务器的步骤.首先,你必须创建一个请求处理类,它是BaseRequestHandler的子类并重载其handle()方法.其次,你必须实例化一个服务器类,传入服务器的地址和请求处理程序类.最后,调用handle_requ

  • Python使用socket模块实现简单tcp通信

    正文开始: 服务器端代码: # 再来简单的测试,这个是服务器端 import socket import sys BUF_SIZE = 1024 ip_port = (r"127.0.0.1", 11552) my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 先拿到套接字,指定个ipv4以及流式数据包 my_socket.bind(ip_port) # 绑定 my_socket.listen(2) # 循环等

  • Python socket非阻塞模块应用示例

    本文实例讲述了Python socket非阻塞模块应用.分享给大家供大家参考,具体如下: 一 服务端程序 # 导入模块 import socketserver import random # 定义一个类 class MyServer(socketserver.BaseRequestHandler): # 如果handle方法出现报错,则会进行跳过 # setup方法和finish方法无论如何都会进行执行 # 首先执行setup def setup(self): pass # 然后执行handle

  • Python socket模块方法实现详解

    这篇文章主要介绍了Python socket模块方法实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 socket ssh (不带防止粘包的方法) #! /usr/bin/env python # -*- coding:utf-8 -*- # Author Ian Ying # mail: kongqing.ying@yitu-inc.com import socket import os server = socket.socket()

  • 实例讲解Python中SocketServer模块处理网络请求的用法

    SocketServer创建一个网络服务框架.它定义了类来处理TCP,UDP, UNIX streams 和UNIX datagrams上的同步网络请求. 一.Server Types 有五个不同的服务器类在SocketServer中. 1.BaseServer定义了API, 而且他不是用来实例化和直接使用的. 2.TCPServer用作TCP/IP的socket通讯. 3.UDPServer使用datagram sockets. 4.UnixStreamServer和UnixDatagramS

  • Python的Asyncore异步Socket模块及实现端口转发的例子

    Asyncore模块提供了以异步的方式写入套接字服务客户端和服务器的基础结构. 只有两种方式使一个程序在单处理器上实现"同时做不止一件事".多线程编程是最简单和最流行的方式,但是有另一种很不一样的技术,可以使得我们保持多线程的几乎所有优势,却不用真正使用多线程. 如果你的程序主要是受I/O限制的,这是唯一可行的方式.如果你的程序是受处理器限制的,则先发制人的调度线程可能是你真正需要的.但是,很少网络服务器是受处理器限制的. 如果您的操作系统支持在其I / O库的 select() 系统

  • Python中的socket网络模块介绍

    目录 Socket 服务端(server.py) 客户端(client.py) socket中的一些常用方法 Socket 对象(内建)方法 Python Internet 模块 前言: Python3 提供了两个级别访问的网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发. Socket Socke

  • Python中的Socket 与 ScoketServer 通信及遇到问题解决方法

    Socket有一个缓冲区,缓冲区是一个流,先进先出,发送和取出的可自定义大小的,如果取出的数据未取完缓冲区,则可能存在数据怠慢.其中[recv(1024)]表示从缓冲区里取最大为1024个字节,但实际取值大小是不确定的,推荐其值小于等于8192. 黏包问题: Socket发送两条连续数据时,可能最终会拼接成一条进行发送 解决方法一: 两条数据间进行延时发送,如[tiem.sleep(0.5) #延时0.5s] 解决方法二: 每次发送后等待对方确认接收信息数据,发送一条后就立即接收等待 解决方法三

  • python中的socket实现ftp客户端和服务器收发文件及md5加密文件

    客户端向服务器发送一个请求,请求内容是一个文件名,服务器在查找自己这边有没有这个文件,如果有的话就发送给客户端 1.客户端 生成socket对象 建立连接 输入想要接收的文件 将输入的文件名发送给服务器 接收服务器发回的关于即将要发送来的文件的大小 发送一条信息给服务器告诉它准备好接收了 接收文件数据 打印全部接收的提示信息 client具体实现的代码如下: # Author: Mr.Xue # 2019.10.29 # socket_ftp_client.py import socket im

  • 对于Python中RawString的理解介绍

    总结 1.'''作用: 可以表示 "多行注释" ."多行字符串" ."其内的单双引号不转义" 2.r 代表的意思是: raw 3.r 只对其内的反斜杠起作用(注意单个 \ 的问题) raw string 有什么用处呢? raw string 就是会自动将反斜杠转义. >>> print('\n') >>> print(r'\n') \n >>> (注:出现了两个空行是因为 print() 会自

  • Python 中pandas.read_excel详细介绍

    Python 中pandas.read_excel详细介绍 #coding:utf-8 import pandas as pd import numpy as np filefullpath = r"/home/geeklee/temp/all_gov_file/pol_gov_mon/downloads/1.xls" #filefullpath = r"/home/geeklee/temp/all_gov_file/pol_gov_mon/downloads/26368f3

  • 基于Python中的yield表达式介绍

    python生成器 python中生成器是迭代器的一种,使用yield返回函数值.每次调用yield会暂停,而可以使用next()函数和send()函数可以恢复生成器. 这里可以参考Python函数式编程指南:对生成器全面讲解 注意到yield是个表达式而不仅仅是个语句,所以可以使用x = yield r 这样的语法. 这个知识点在协程中需要使用.协程的概念指的是在一个线程内,一个程序中断去执行另一个程序,有点类似于CPU中断.这样减少了切换线程带来的负担,同时不需要多线程中的锁机制,因为不存在

  • python中常用的数据结构介绍

    栈 # 使用List作为栈 stack = [3, 4, 5] # 入栈 stack.append(6) # 出栈 val = stack.pop() # 栈定元素 val = stack[-1] 队列 队列是FIFO, 但是List对于First Out效率不够高.通常用双端队列Deque来实现队列 Deque的特点是,两端添加和删除都是O(1)的时间复杂度 from collections import deque queue = deque(["Eric", "John

  • python中sys模块的介绍与实例

    python版本: Python 2.7.6 1: sys是python自带模块. 利用 import 语句输入sys 模块. 当执行import sys后, python在 sys.path 变量中所列目录中寻找 sys 模块文件.然后运行这个模块的主块中的语句进行初始化,然后就可以使用模块了 . 2: sys模块常见函数 可以通过dir()方法查看模块中可用的方法. 结果如下, 很多我都没有用过, 所以只是简单介绍几个自己用过的方法. $ python Python 2.7.6 (defau

  • Python中字典的基础介绍及常用操作总结

    目录 1.字典的介绍 2.访问字典的值 (一)根据键访问值 (二)通过get()方法访问值 3.修改字典的值 4.添加字典的元素(键值对) 5.删除字典的元素 6.字典常见操作 1.len 测量字典中键值对的个数 2. keys 返回一个包含字典所有KEY的列表 3. values 返回一个包含字典所有value的列表 4. items 返回一个包含所有(键,值)元祖的列表 5.遍历字典的key(键) 6.遍历字典的value(值) 7.遍历字典的items(元素) 8.遍历字典的items(键

  • Python中关于集合的介绍与常规操作解析

    目录 1.集合的介绍 2.访问集合的元素 3.集合的添加 4.集合的修改 5.集合的删除 1.使用remove方法 2.使用pop方法 3.使用discard方法 6.集合的交集和并集 1.交集 2.并集 7.公共方法 8.python内置函数 1.len 2.max 3.min 4.del 1.集合的介绍 集合是无序的,集合中的元素是唯一的,集合一般用于元组或者列表中的元素去重. 定义一个空集合 格式如下: name=set() 注意以下写法为一个空字典,为空默认是字典,如果有数据在根据格式判

随机推荐