python的socket模块_python模块:socket模块

1.Socket类型

socket(family,type[,protocal])     使用给定的地址族,套接字类型,协议编号(默认是0)来创建套接字

socket类型

描述

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_SEQPACKET

可靠的连续数据包服务

创建UDP Socket

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

2.Socket函数

socket函数(服务器)

描述

s.bind(address)

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

s.listen(backlog)

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

s.accept()

接受TCP连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据.address是连接客户端的地址.

socket函数(客户端)

s.connect(address)

连接到address处的套接字.一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误.

s.connect_ex(adddress)

功能与connect(address)相同,但是成功返回0,失败返回errno的值.

公共socket函数

s.recv(bufsize[,flag])

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

s.send(string[,flag])

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

s.sendall(string[,flag])

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

s.close()

关闭套接字.

s.gettimeout()

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

s.fileno()

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

s.makefile()

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

3.socket原理

TCP服务端:

(1).创建套接字,绑定套接字到本地IP与端口(socket.socket(socket.AF_INET,socket.SOCK_STREAM) , s.bind())

(2).开始监听连接(s.listen())

(3).进入循环,不断接受客户端的连接请求(s.accept())

(4).然后接收传来的数据,并发送给对方数据(s.recv() , s.sendall())

(5).传输完毕后,关闭套接字(s.close())

TCP客户端:

(1).创建套接字,连接远端地址(socket.socket(socket.AF_INET,socket.SOCK_STREAM) , s.connect())

(2).连接后发送数据和接收数据(s.sendall(), s.recv())

(3).传输完毕后,关闭套接字(s.close())

4.例1:简单实现socket通信

服务端:

[root@node1 python]# vim socket12.py

#!/bin/env python

#!-*- coding:UTF-8 -*-

import socket

s=socket.socket()

host=socket.gethostname()

port=1234

s.bind((host,port))

s.listen(5)

while True:

c,addr=s.accept()

print "Got connection from,addr"

c.send("Thank you for connection")

c.close()

[root@node1 python]# chmod  755 socket12.py

[root@node1 python]# ./socket12.py

[root@node1 python]# netstat -antulp | grep 1234

tcp        0      0   0.0.0.0:1234           0.0.0.0:*                   LISTEN      31580/python

客户端:

[root@node2 ~]# vim socket12.py

#!/bin/env python

#!-*- coding:UTF-8 -*-

import socket

s=socket.socket()

host='0.0.0.0'            --服务端的IP地址

port=1234

s.connect((host,port))

print s.recv(1024)

[root@node2 ~]# chmod  755 socket12.py

[root@node2 ~]# ./socket12.py

Thank you for connection

[root@node2 ~]#

此时服务端就会有数据:

5.例2:利用socket协议在客户端操作服务器

服务器端:

[root@node1 python]# cat socket2.py

#!/bin/env python

#!-*- coding:UTF-8 -*-

import socket

import commands

host=socket.gethostname()     --服务器的主机名

port=1245                                --启动python脚本的端口

s=socket.socket()                      --实例一个socket对像

s.bind((host,port))                     --端口绑定到主机的IP地址

s.listen(5)                                  --允许多少个客户端连接

while True:

conn,addr=s.accept()           --接收客户端的信息

print "Connect by",addr       --在服务端输出客户端的IP地址

while True:

data=conn.recv(1024)

cmd_status,cmd_result=commands.getstatusoutput(data)   --获取客户端的命令

if len(cmd_result.strip()) == 0:

conn.sendall('Done.')

else:

conn.sendall(cmd_result)

conn.close()

[root@node1 python]# ./socket2.py

[root@node1 python]# netstat -antulp | grep python

tcp        0      0  0.0.0.0:1245           0.0.0.0:*                   LISTEN      2550/python

[root@node1 python]#

客户端:

[root@node2 ~]# cat socket2.py

#!/bin/env python

#!-*- coding:UTF-8 -*-

import socket,commands

host='0.0.0.0'         --服务端的IP地址

port=1245

s=socket.socket()

s.connect((host,port))

while True:

cmd=raw_input("Please input cmd:")

s.sendall(cmd)

data=s.recv(1024)

print data

s.close()

[root@node2 ~]# 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完整性校验用到常见的算法_校验数据的完整性,校验数据完整性,使用MD5/SHA算法校...

校验数据的完整性,校验数据完整性,使用MD5/SHA算法校使用MD5/SHA算法校验数据的完整性package cn.itcast.gz;import java.io.File;import java.io.FileInputStream;import java.security.DigestInputStream;import java.security.MessageDigest;/** * 主要用于验证数…

python超市买苹果_官网购买的iPhone12pro还没发货?试着用Python快速入手

引言​iPhone12pro有望成为2020年末真香机,动辄3000元的溢价让不少消费者选择了等待官网调货。除了官方与电商线上平台,苹果还采用了线下预约制提货。但每天少的可怜的出货量,和不到一秒钟就抢空的预约名额让“老年人”手速的各位望而却步。传…

server多列转行 sql_sql server 行转列及列转行的使用

在我们使用的数据库表中经常需要用到行列互相转换的情况,使用sql 的关键词 UNPIVOT(列转行)和PIVOT(行转列)可轻松实现行列转换。一、列转行:员工月份排班表存储是采用1号~31号作为列的方式进行存储的现通过 UNPIVOT 将每天的班次用行进行展示&#xff0…

git 拉取远程其他分支代码_git切换远程分支并拉取远程分支代码

Git一般有很多分支,我们clone到本地的时候一般都是master分支,那么如何切换到其他分支呢?主要命令如下:1. 查看远程分支$ git branch -a我在mxnet根目录下运行以上命令:~/mxnet$ git branch -a* master可以看到&#x…

python登录豆瓣_python登录豆瓣,发帖

学习了urllib、urllib2及cookielib常用方法的使用登录豆瓣,由于有验证码,采取的办法是将验证码图片下载到同目录下,查看图片后输入验证码即可登录、发帖帖子内容写死在代码中了[Python]代码# -- coding:gbk --import sys, time, os, reimport…

ios 代码设置控件宽高比_ios-自动布局以保持视图大小比例

我正在努力实现以下目标:我的xib中有2个视图,需要使边缘(两侧和顶部)保持20像素需要调整大小的2个视图的大小不同它们必须相隔20像素它们的宽度需要相对于父视图的宽度保持不变我阅读了有关执行此操作的教程,但是它的工作原理是,它…

echarts 在两点之间画一条线_树的手绘很难画?分步骤教你画,简单易学,收藏起来临摹学习...

前景树——半树、角树画法半树与角树,在建筑手绘中常处于前景位置,其表现需尽量写意,形体概括,对比强烈,进而更好地引导与突出中景。(1)半树半树,顾名思义只需画出单棵树从树冠中下部…

opencv python 直方图反向投影_python OpenCV学习笔记直方图反向投影的实现

本文介绍了python OpenCV学习笔记直方图反向投影的实现,分享给大家,具体如下:它用于图像分割或寻找图像中感兴趣的对象。简单地说,它创建一个与我们的输入图像相同大小(但单通道)的图像,其中每个像素对应于属于我们对象…

上古卷轴5json文件修改_【白夜谈】我做了一款失败的《社长卷轴》Mod

文/Kong 题图 / CaesarZX白夜谈是编辑的自留地,聊一些比较个人的内容。但是对于我来说,这个栏目总是一个特别的苦差。因为我实在没有太多表达观点的欲望,所以我和负责白夜谈的跳跳老师商量,可不可以尝试搞个系列节目。比如&#x…

中音萨克斯指法表图_初学萨克斯一定要了解这6点基础知识

萨克斯管是一种色彩性很强的乐器,它的声音独特,带有神秘的色彩,音色十分迷人,是一种比较接近人声特点的乐器,因此吸引到越来越多的人喜欢上萨克斯。那么新手在初学阶段关于萨克斯一定要了解这6点基础知识。一、萨克斯管…

在哪里可以找水系图_虹吸雨水排水系统对比传统重力排水,好在哪里?

建筑物的排水系统是必不可少的,雨水的排水又是其重中之重的排水系统。雨水排水系统的选择我们需要考虑哪些因素呢?下面就介绍一下虹吸雨水排水系统相较于传统重力排水的优势到底在哪里?一、虹吸雨水排水系统原理形成原理:利用屋面…

ug编程内公差和外公差是什么_工厂老师傅自学数控编程多年心得,希望你们少走弯路...

需要UG资料可以关注私信 “UG"或者 ”UG教程 “领取。很多人都认为自学有恒心有耐心有定力就可以了,有这些意志还没有达到自学的水准,因为有很多东西你都不知道是有这回事的,或许你知道有这回事你根本解决不了,自学的满足条件…

加油站都需要什么手续_农村买房过户都需要什么手续?

一、农村房屋过户怎么办理? 根据我国法律的规定,办理农村房屋过户需要去乡或镇的国土所。农村房屋过户需要去乡镇国土所提出申请,提交相关材料后,当地国土所根据申请人提供的权属资料进行审查,实地进行勘丈、调查、公…

zplane函数怎么用m文件调用_matlab中一个m文件怎么调用另一个m文件的函数

展开全部1、首先要在笔记62616964757a686964616fe59b9ee7ad9431333431353265本电脑上安装好指定版本的matlab软件并双击打开。2、然后双击matlab图标打开其主页面,可以看到这个软件的按钮都是全英文单词的。3、那么创建m文件的方法就是鼠标移动到New按钮上单击一下&…

axi时序图_深入 AXI4总线(E3)实战:制作一个 AXI 接口 IP

本系列我想深入探寻 AXI4 总线。不过事情总是这样,不能我说想深入就深入。当前我对 AXI总线的理解尚谈不上深入。但我希望通过一系列文章,让读者能和我一起深入探寻 AXI4。在本系列先前的文章中,我们首先通过协议 specification 了解协议的接…

动点四边形周长最短_初中几何--线段之和最小值 Part 1:通过点关于直线对称点得到两定点之间直线段长度最短。...

下面介绍下求线段和最小值常见题型1,通过点关于直线对称点得到两定点之间直线段长度最短。以下题为例,已知矩形ABCD,AB8, AD6.E,F分别为AB,AD的中点。G,H分别为BC,AB上动点。求四边形…

番茄钟怎么调_学习神器-番茄钟

番茄钟番茄工作法是简单易行的时间管理方法。使用番茄工作法,选择一个待完成的任务,将番茄时间设为25分钟,专注工作,中途不允许做任何与该任务无关的事。直到番茄时钟响起,然后进行短暂休息一下(5分钟就行&…

获取某一条_想获取流量?这几种工具是必须要有的,能帮你获客快人一步!

2020年,最难的莫过于实体店了,而没有受到影响的,也就是那些互联网企业,一切企业甚至业绩比以前还好,不得不承认,互联网确实有它的独特之处。也因此,很多实体商家也在慢慢向互联网转变。为什么要…

python 修改word中的表格_python批量处理word中的表格

def word_table_formater():from win32com import clientword client.Dispatch(Word.Application)doc word.Documents.Open(C:\\Users\\Administrator\\Desktop\\test.docx)i 1for table in doc.Tables:print(i, len(doc.Tables))# 设置列宽table.Columns(1).Width 85table…

排除jar_Gradle排除依赖关系

Gradle排除依赖关系在IDE中发现了C3P0的依赖,但是在build.gradle并没有手动导入,所以说某个jar包依赖了,在STS中没有像Maven可以直接查看依赖的窗口可以在命令行下查看整个项目的依赖关系gradle dependencies![[外链图片转存失败(img-v7CgoEk…