我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python-socket总结

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python-socket总结

socket是什么

什么是socket所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。

应用程序通常通过"套接字"向网络发出请求或者应答网络请求。说白了就是一种通信机制。

列入你和移动客服咨询问题时,会有一个客服为你解决问题一样,就是你和客服间的相互通信

在socket里就是“发送”和“接收”这两个动作就是socket通信方式

socket.gethostname()     # 获取主机名

from socket import *     # 避免 socket.socket()

s=socket()

s.bind()         # 绑定地址到套接字

s.listen()       # 开始TCP监听

s.accept()       # 被动接受TCP客户端连接,等待连接的到来

s.connect()      # 主动初始化TCP服务器连接

s.connect_ex()   # connect()函数的扩展版本,出错时返回出错码,而不是跑出异常

s.recv()         # 接收TCP数据

s.send()         # 发送TCP数据

s.sendall()      # 完整发送TCP数据

s.recvfrom()     # 接收UDP数据

s.sendto()       # 发送UDP数据

s.getpeername()  # 连接到当前套接字的远端的地址(TCP连接)

s.getsockname()  # 当前套接字的地址

s.getsockopt() # 返回指定套接字的参数

s.setsockopt()   # 设置指定套接字的参数

s.close()        # 关闭套接字

s.setblocking()  # 设置套接字的阻塞与非阻塞模式

s.settimeout()   # 设置阻塞套接字操作的超时时间

s.gettimeout()   # 得到阻塞套接字操作的超时时间

s.filen0()       # 套接字的文件描述符

s.makefile()     # 创建一个与该套接字关联的文件对象

socket.AF_UNIX # 只能够用于单一的Unix系统进程间通信

socket.AF_INET # 服务器之间网络通信

socket.AF_INET6 # IPv6

socket.SOCK_STREAM  # 流式socket , for TCP

socket.SOCK_DGRAM  # 数据报式socket , for UDP

socket.SOCK_RAW      # 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。

socket.SOCK_RDM  # 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。

socket.SOCK_SEQPACKET # 可靠的连续数据包服务

基础讲解

    # 创建socket对象

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 监听端口

    sock.bind(('127.0.0.1',8001))

    # 开始监听,

    sock.listen(5)


    while True:

        # 阻塞,deng 。。。。

        # 直到有请求连接

        print '....'

        connection, address = sock.accept()

        # connection,代表客户端socket对象,

        # address,客户端IP地址

        #handle_request(connection)

        buf = connection.recv(1024)

        print buf

        connection.send("HTTP/1.1 200 OK\r\n\r\n")

        connection.send("Hello, World")

        connection.close()

#服务端

import socket 

HOST=''  #空代表0.0.0.0

PORT= 6666  #监听端口

s= socket.socket(socket.AF_INET,socket.SOCK_STREAM) 

s.bind((HOST,PORT)) 

s.listen(1) 

while True:

    conn,addr= s.accept()   

    print'Connected by', addr 

    while  True:

        data = conn.recv(1024) #接收1024字节数据

        if not data: break     #如果收不到客户端数据了(代表客户端断开了),就断开

        conn.sendall(data.upper())    #将收到的数据全变成大写再发给客户端 

    conn.close() #关闭此客户端的连接实例

#客户端

import socket 

HOST='' 

PORT= 6666  #监听端口

s= socket.socket(socket.AF_INET,socket.SOCK_STREAM) 

s.bind((HOST,PORT)) 

s.listen(1) 

while True:

    conn,addr= s.accept()   

    print'Connected by', addr 

    while  True:

        data = conn.recv(1024) #接收1024字节数据

        if not data: break     #如果收不到客户端数据了(代表客户端断开了),就断开

        conn.sendall(data.upper())    #将收到的数据全变成大写再发给客户端 

    conn.close() #关闭此客户端的连接实例

    服务端socket在使用bind方法之后调用listen方法去监听一个给定的 地址。然后,客户端socket就可以通过使 用 connect方法(connect方法所使用的地址参数与bind相同)去连接服务端。listen方法 要求一个参数,这个参数就是等待连接队列中所能包含的连接数。

    一旦服务端socket调用了listen方法,就进入了临听状态,然后通 常使用一个无限的循环:1、开始接受客房端的连接,这通过调用accept方法来实现。调用了这个方法后将处于阻塞状态(等待客户端发起连接)直到一个客 户端连接,连接后,accept返回形如(client,address)的一个元组,其中client是一个用于与客户端通信的 socket,address是客户端的形如xxx.xxx.xxx.xxx:xxx的地址;2、然后服务端处理客户端的请求;3、处理完成之后又调用 1。



#以上例子是单线程的只能一对一的服务,即服务端只能处理一个链接,想要处理多线程怎么办,不用急多线程的Python已给我们写好直接调用就好


socket服务端

#用于处理多线程的模块

    import SocketServer

    import os

    class MyTCP(SocketServer.BaseRequestHandler):

        def handle(self):

            while True:

                self.data=self.request.recv(1024).strip() #接受数据

                if self.data == 'quit' or not self.data:break #如果没有数据或为quit 退出

                cmd_data=os.popen(self.data).read() #将命令结果存为字符串

                if cmd_data == '':cmd_data= self.data + ': Command not found' #如果命令结果为空或命令返回为空

                self.request.sendall(cmd_data) #发送所有的数据

    if __name__ == '__main__':

        HOST,PORT = '127.0.0.1',6666 #绑定端口和ip

        server = SocketServer.ThreadingTCPServer((HOST,PORT),MyTCP) #将写的类加入多线程处理

        server.serve_forever() #循环启动

socket客户端

    import socket

    HOST='127.0.0.1'

    PORT=6666

    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #服务期间的TCP通信

    s.connect((HOST,PORT)) #绑定端口和ip

    while True:

        while True: #如果命令为空继续输入

            cmd=raw_input('CMD:').strip()

            if cmd != '':break

        s.sendall(cmd) #发送所有数据

        data=s.recv(1024).split('\n') #以换行符分割接收的数据

        print 'cmd:'

        for line in data:print line #循环打印数据

    s.close() #关闭套接字


用SocketServer创建一个服务器需要三步:

1、通过子类化BaseRequestHandler类和覆盖它的handle()方法来创建一个请求处理器类,用于处理进来

的请求;
2、实例化服务类如TCPServer,并传递给它参数:服务器地址和请求处理器类;
3、调用服务实例对象的handle_request()或serve_forever()方法去处理请求。


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python-socket总结

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python-socket总结

socket是什么什么是socket所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。说白了就是一种通信机制。列入你和移动客服咨询问题时,会有一个客服
2023-01-31

常见的socket error错误总结

常见的socket error错误总结如下:1. ConnectionRefusedError:连接被拒绝。可能是目标主机拒绝了连接请求,或者目标端口没有监听。2. ConnectionResetError:连接被对方重置。可能是对方主动关
2023-08-24

python 总结

一.列表1.extend(列表独有功能)循环添加到一个列表中a.有列表users = ['张三',‘李四]   people = ['小明,王五']users.extend(people)   # 在users中添加people.exten
2023-01-31

PYthon signal总结

预设信号处理函数signal包的核心是使用signal.signal()函数来预设(register)信号处理函数,如下所示:singnal.signal(signalnum, handler)signalnum为某个信号,handler为
2023-01-31

Android Phone蓝牙通信方式总结(Socket与Gatt)

Android手机间通过蓝牙方式进行通信,有两种常见的方式,一种是socket方式,另一种是通过Gatt Server(Android 5.0以后)通信,socket方式最为简单,但是很多低功耗的蓝牙设备,如单片机上的蓝牙模块可能不支持。而
2022-06-06

Python import 【总结】

Python import总结可能网上很多文章或博客都没解释清楚,作者自己也苦心于Python的import。至此,把自己的总结的分享给大家,本文不做基础讲解,仅说明疑惑的地方。新版本的Pycharm 2017.1.1,对自己定义的模块都有
2023-01-31

Python中list总结

1:列表 list的定义:一个连续的,排列有序的数列,由若干个元素组成,元素可以是任意对象(数字、字符串,对象,列表),元素可以使用索引查找,线性的数据结构。使用[ ]表示。列表是可变的,是可迭代对象。列表具体定义l=[ ] (空列表)
2023-01-31

python用法总结

requests库的用法:requests是python实现的简单易用的HTTP库因为是第三方库,所以使用前需要cmd安装pip ×××tall requests安装完成后import一下,正常则说明可以开始使用了基本用法:import r
2023-01-31

Python 函数总结

声明和调用函数:    声明函数的方法是用def关键字,函数名及小括号里面的参数列表。def foo(x): print x    调用函数:给出函数名和一小对括号,并放入所需参数:#!/usr/bin/env pytho
2023-01-31

python 面试总结

金* python开发工程师:1. 字符串连接+和join的区别:主要考察两种实现方式内存管理:       字符串对象是不可改变的,Python创建一个字符串后,你不能把这个字符中的某一部分改变。任何对字符串的操作包括'+'操作符, 每次
2023-01-31

Python:索引总结

Python包含6种内建序列:列表元组字符串Unicode字符串buffer对象xrange对象索引#字符串可以直接使用索引,不需要专门的变量引用>>> 'Hello World!'[0]'H'>>> 'Hello World!'[11]'
2023-01-31

python语法总结

正确处理中文,可以在#!/usr/bin/python下面加上 一行# -*- coding: utf-8 -*-列表list。用方括号list1=[1,'2',3,[a,b,c]]尾部添加元素list1.append('python')l
2023-01-31

Python总结:Python基础(一)

入门知识拾遗一、作用域对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用。123if 1==1:    name = 'wupeiqi'print  name下面的结论对吗?外层变量,可以被内层变量使用内层变量,无法被
2023-01-31

python 学习总结3

Python蟒蛇绘制一、实现程序如下 1 import turtle 2 turtle.setup (650, 350, 200, 200)#turtle的绘图窗体turtle.setup(width, height, startx, st
2023-01-30

python shutil模块总结

shutil.copyfile(src,dst)复制文件,如果存在会覆盖copymode( src, dst)复制权限copystat(src, dst)复制访问时间和修改时间和权限copy(src, dst) 复制文件到一个目录copy2
2023-01-31

python学习总结-----pytho

一、python简介    python 是一种面向对象、解释性的脚本语言,遵循 GPL 协议。语法简单、社区强大、丰富的库支持。又被称为“胶水语言”。能把其他语言(主要C/C++)写的模块很轻松的结合在一起。二、python 安装 win
2023-01-31

python paramiko 问题总结

Working with paramikoSSHClient is the main class provided by the paramkio module. It provides the basic interface you ar
2023-01-31

Python知识点总结

本篇内容介绍了“Python知识点总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 为什么要使用描述符?假想你正在给学校写一个成绩管理
2023-06-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录