Python---socket库
为方便以后查询和学习,特从常用库函数和示例来总结socket库
1. 术语
family:AF_INET
socktype:SOCK_STREAM或SOCK_DGRAM
protocol:IPPROTO_TCP
2. 常用库函数
(1). socket()
#创建socket
(2). gethostname()
#返回主机名
>>>>USER-20170820ND
(3). gethostbyname(hostname)
#根据主机名得到IP
>>>>192.168.3.8
(4). gethostbyname_ex(hostname)
#根据主机名返回一个三元组(hostname, aliaslist, ipaddrlist)
>>>> ('USER-20170820ND', [], ['192.168.3.8'])
(5). gethostbyaddr(ip_addr)
#返回一个三元组(hostname, aliaslist, ipaddrlist)
>>>> ('USER-20170820ND.ws325', [], ['192.168.3.8'])
(6). getservbyname(servicename[, protocolname])
#返回端口号
port = socket.getservbyname("http", "tcp")
>>>> 80
(7). getprotobyname()
ppp = socket.getprotobyname("tcp")
>>>> 6
(8). getaddrinfo(host, port, family=0, type=0, proto=0, flags=0)
(9). ntohs() ntohl()
#将网络字节序转换为主机字节序
(10). htons() htonl()
#将主机字节序转换为网络字节序
(11). inet_aton()
(12). inet_ntoa()
(13). getdefaulttimeout()
#得到设置的时间超时
(14). setdefaulttimeout()
#设置时间超时
3. Serve和Client通讯示例
#coding:UTF-8 import socket #导入socket库 class Serve:
'Socket Serve!!!' #设置退出条件
stop = False def __init__(self):
hostname = socket.gethostname()
print (hostname)
self.ip = socket.gethostbyname(hostname)
self.port = 1122
self.addr = (self.ip,self.port)
print (self.addr) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print (s) s.bind(self.addr)
s.listen(5) while not self.stop:
print('等待接入,侦听端口:%s -- %d' % (self.ip, self.port))
clientsocket, clientaddr = s.accept()
print ("接入成功:%s--%d" %(clientaddr[0], clientaddr[1])) while True: try:
buff = clientsocket.recv(1024)
print ("接收数据:%s" %(buff))
except:
clientsocket.close()
break;
if not buff:
print ("not buff!!!")
break; self.stop=(buff.decode('utf8').upper()=="QUIT")
if self.stop:
print ("响应退出命令!")
break
clientsocket.close()
s.close() if __name__ == "__main__":
serve = Serve()
#coding:UTF-8 # client
import socket class Client: 'Socket Client!' def __init__(self, ip, port):
self.ip = ip
self.port = port
self.addr = (self.ip, self.port)
print (self.addr) def connect(self):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print (s)
s.connect(self.addr) return s
#Client.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#print (Client.s)
#Client.s.connect(self.addr) if __name__ == "__main__":
ip = "192.168.3.8"
port = 1122
client = Client(ip, port)
print (client.__doc__) client.connect() while True:
data = input(">")
if not data:
break;
sock.send(data.encode("utf8"))
print ("发送信息:%s" %(data))
if data.upper() == "QUIT":
break;
sock.close()
3. udp示例
#coding=utf-8 from socket import *
from time import strftime ip_port=('127.0.0.1',9000)
bufsize=1024 tcp_server=socket(AF_INET,SOCK_DGRAM)
tcp_server.bind(ip_port) while True:
msg,addr=tcp_server.recvfrom(bufsize)
print('===>',msg) if not msg:
time_fmt='%Y-%m-%d %X'
else:
time_fmt=msg.decode('utf-8')
back_msg=strftime(time_fmt) tcp_server.sendto(back_msg.encode('utf-8'),addr) tcp_server.close()
#coding=utf-8 from socket import *
ip_port=('127.0.0.1',9000)
bufsize=1024 tcp_client=socket(AF_INET,SOCK_DGRAM) while True:
msg=input('请输入时间格式(例%Y %m %d)>>: ').strip()
tcp_client.sendto(msg.encode('utf-8'),ip_port) data=tcp_client.recv(bufsize) print(data.decode('utf-8')) tcp_client.close()
Python---socket库的更多相关文章
- Python底层socket库
Python底层socket库将Unix关于网络通信的系统调用对象化处理,是底层函数的高级封装,socket()函数返回一个套接字,它的方法实现了各种套接字系统调用.read与write与Python ...
- (转)python标准库中socket模块详解
python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...
- Python Socket 编程——聊天室示例程序
上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...
- python标准库00 学习准备
Python标准库----走马观花 python有一套很有用的标准库.标准库会随着python解释器一起安装在你的电脑上的.它是python的一个组成部分.这些标准库是python为你准备的利器,可以 ...
- python socket发送魔法包网络唤醒开机.py
python socket发送魔法包网络唤醒开机.py 现在的电脑应该都普遍支持有线网络的WOL了,支持无线网络唤醒的电脑,可能比较少. """ python socke ...
- Python标准库的学习准备
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python标准库是Python强大的动力所在,我们已经在前文中有所介绍.由于标准 ...
- Python标准库——走马观花
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python有一套很有用的标准库(standard library).标准库会随着 ...
- Python 标准库 urllib2 的使用细节[转]
转自[http://zhuoqiang.me/python-urllib2-usage.html] Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比 ...
- Python Requests库:HTTP for Humans
Python标准库中用来处理HTTP的模块是urllib2,不过其中的API太零碎了,requests是更简单更人性化的第三方库. 用pip下载: pip install requests 或者git ...
- Python 标准库 urllib2 的使用细节
刚好用到,这篇文章写得不错,转过来收藏. 转载自 道可道 | Python 标准库 urllib2 的使用细节 Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节 ...
随机推荐
- 第三章 go语言 程序的流程控制
程序的流程控制主要包括三种不同的结构,分别是顺序结构.选择结构和循环结构. ² 顺序结构最为简单,程序执行时,按照语句的顺序自上而下依次执行. ² 选择结构是根据条件表达式的结果选择执行某些语句. ² ...
- 4.variables
变量在python可以是字符也可以是数字.例如: x = 2 price = 2.5 word = 'Hello' 变量名在等号左边,值在右边,一旦变量被指定,就可以在程序的其他地方使用它. ...
- iOS QQ分享图片无反应问题
受iOS 9 上 http 限制 需要在info.plist文件添加必要string <key>LSApplicationQueriesSchemes</key> <ar ...
- 前端学习:html基础学习四
7.HTML表格(主要内容<table><caption><tr><th><td>标记) <table>标记 基本格式 < ...
- 数据结构-堆(应用篇)之堆排序法-C和C++的实现
堆排序 关于堆的内容我们已经在上一节中了解了,本节中将给出一个堆的应用-堆排序. 关于堆的概念可以看上一节,入口:http://www.cnblogs.com/HongYi-Liang/p/78536 ...
- Coursera课程 Programming Languages, Part C 总结
碎言碎语 和前面的 ML 和 Racket 感觉明显不一样了,一边学着一边觉得这真是一门奇怪的语言,有着各种奇怪的语法,不过真的算是一个奇妙的体验(相比前面的两门语言,Ruby 的学习资源多了不少). ...
- 浅析nodeJS中的Crypto模块,包括hash算法,HMAC算法,加密算法知识,SSL协议
node.js的crypto在0.8版本,这个模块的主要功能是加密解密. node利用 OpenSSL库(https://www.openssl.org/source/)来实现它的加密技术, 这是因为 ...
- (亲测)1分钟破解IDM权限,傻瓜都能学会的破解方法(番外篇:利用破解工具直接破解IDM)
Internet Download Manager (IDM)是比较好用的一款下载工具~ 上一节我讲到一种利用修改防火墙来进行阻止访问服务器,请参看这篇文章(亲测)躺着破解IDM下载权限,治疗不用破解 ...
- BZOJ:3911: SGU383 Caravans(三角剖分)
原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3911 直接求最小生成树显然边太多,考虑少用点边. 连出来的边肯定是没相交的,我们需要做一下 ...
- CF 348DTurtles
题目:http://codeforces.com/contest/348/problem/D 如果只走一条路那就直接dp就可以了. 设cal(x1,y1,x2,y2)为(x1,y1)→(x2,y2)的 ...