Python网络编程笔记一

AF_INET:IPV4

AF_INET6:IPV6

套接字类型:

SOCK_STREAM:TCP

SOCK_DGRAM:UDP

创建TCP套接字,也可以不传递参数,默认创建TCP套接字

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

下面是基于python3实现的简单的TCP服务端和客户端

TCP使用send、recv发送和接收数据

服务端:

 1 import socket
 2
 3 HOST = "127.0.0.1"
 4 PORT = 9999
 5 BUFFSIZE = 1024
 6 ADDR = (HOST, PORT)
 7
 8 tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 9
10 tcpSocket.bind(ADDR)
11
12 tcpSocket.listen(5)
13
14 while True:
15     print("watting clien connection...")
16     tcpClienSock, addr = tcpSocket.accept()
17     print("connected from:", addr)
18     while True:
19         data = tcpClienSock.recv(BUFFSIZE)
20         if not data:
21             break
22         print("i have received data: ", data)
23         sendData = "hello, i have received your date: %s" % data
24         tcpClienSock.send(bytes(sendData, encoding="utf-8"))
25     tcpClienSock.close()
26 tcpSocket.close()

客户端:

 1 import socket
 2
 3 HOST = "127.0.0.1"
 4 PORT = 9999
 5 BUFFSIZE = 1024
 6 ADDR = (HOST, PORT)
 7
 8 tcpClientSock = socket.socket()
 9 r = tcpClientSock.connect(ADDR)
10 print(r)
11
12 while True:
13     data = input(">>")
14     if data == "q" or data == "quit":
15         break
16     tcpClientSock.send(bytes(data, encoding="utf-8"))
17     recvData = tcpClientSock.recv(BUFFSIZE)
18     if not recvData:
19         break
20     print(recvData)
21 tcpClientSock.close()

接下来是简单的UDP服务器和客户端实现

UDP使用sendto、recvfrom发送和接收数据

UDP服务器:

 1 import socket
 2
 3 HOST = "127.0.0.1"
 4 PORT = 9999
 5 BUFFSIZE = 1024
 6 ADDR = (HOST, PORT)
 7 #UDP服务器创建套接字后,只需要绑定上IP和端口号,等待接收数据即可
 8 #不需要listen和accept
 9 udpSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
10 udpSocket.bind(ADDR)
11
12 while True:
13     print("watting message...")
14     data, addr = udpSocket.recvfrom(BUFFSIZE) #会返回发送者地址
15     sendData = "hello, i have recv your date: %s" % data
16     udpSocket.sendto(bytes(sendData, encoding="utf-8"), addr)
17     print("receive message %s from %s" % (data, addr))
18 udpSocket.close()

UDP客户端:

 1 import socket
 2
 3 HOST = "127.0.0.1" # ‘localhost‘也可以
 4 PORT = 9999
 5 BUFFSIZE = 1024
 6 ADDR = (HOST, PORT)
 7 #创建套接字即可发送数据,不需要connect连接
 8 udpClientSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
 9
10 while True:
11     data = input(">>")
12     if data == "q" or data == "quit":
13         break
14     udpClientSock.sendto(bytes(data, encoding="utf-8"), ADDR)
15     recvData, addr = udpClientSock.recvfrom(BUFFSIZE)
16     if not recvData:
17         break
18     print(recvData)
19 udpClientSock.close()
时间: 2024-12-29 06:39:29

Python网络编程笔记一的相关文章

PYTHON网络编程笔记

socket.socket(socket.AF_INET,socket.SOCK_STREAM) AF 表示ADDRESS FAMILY 地址族 PF 表示PROTOCOL FAMILY 协议族 但这两个宏定义是一样的 所以使用哪个都没有关系 Winsock2.h中 #define AF_INET 0 #define PF_INET AF_INET 所以在windows中AF_INET与PF_INET完全一样 而在Unix/Linux系统中,在不同的版本中这两者有微小差别 对于BSD,是AF,对

Python网络编程笔记二

使用select模块实现IO多路复用服务端 1 import socket 2 import select 3 #windows上只支持select.select,不支持poll epoll 4 5 HOST = "127.0.0.1" 6 PORT = 9999 7 BUFFSIZE = 1024 8 ADDR = (HOST, PORT) 9 #创建服务器端监听套接字 10 tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_

《Python网络编程基础》笔记

主要是关于<Python网络编程笔记>这本书的笔记...可能有点乱... 总共包含6个部分.. 第一部分 第1章:客户/服务器网络介绍 未完待续.....

python核心编程--笔记

python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找python路径 1.4 –v   冗余输出(导入语句详细追踪) 1.5 –m mod 将一个模块以脚本形式运行 1.6 –Q opt 除法选项(参阅文档) 1.7 –c cmd 运行以命令行字符串心事提交的python脚本 1.8 file   以给定的文件运行python脚本 2 _在解释器中表示最后

python 网络编程 (二)---tcp

异常 python的socket模块实际上定义了4种可能出现的异常: 1)与一般I/O 和通信问题有关的socket.error; 2)与查询地址信息有关的socket.gaierror; 3)与其他地址错误有关的socket.herror; 4)与在一个socket上调用settimeout()后,处理超时有关的socket.timeout; import socket, sys, time host = sys.argv[1] textport = sys.argv[2] filename

[Python网络编程] DNS缓存解决方案

记得以前写爬虫的时候为了防止dns多次查询,是直接修改/etc/hosts文件的,最近看到一个优美的解决方案,修改后记录如下: import socket _dnscache={} def _setDNSCache(): """ Makes a cached version of socket._getaddrinfo to avoid subsequent DNS requests. """ def _getaddrinfo(*args, **

Python 网络编程

Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发. 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. socket()函数 Pyt

[Python网络编程]gevent httpclient以及网页编码

之前看到geventhttpclient这个项目,https://github.com/gwik/geventhttpclient,官方文档说非常快,由于响应使用了C的解析,所以我一直想把这玩意用到项目中, 这两天一直在纠结这玩意,说实在一句话,比较难用,封装的不给力,最大缺陷如下: 1.不支持重定向,重定向需要自己来写,很费事 2.新建的httpclient对象只能发送同域名的请求 这相当的蛋疼,我花了一点时间封装了一下,解决了上面的两个问题,还增加了自动编解码问题,代码如下: #!/usr/

linux网络编程笔记——TCP

1.TCP和UDP TCP是长连接像持续的打电话,UDP是短消息更像是发短信.TCP需要消耗相对较多的资源,但是传输质量有保障,UDP本身是不会考虑传输质量的问题. 2.网络传输内容 我习惯的做法是直接通过TCP传送结构体,当然前提是收发两端都在程序里对目标结构体有充分的定义.特别说明的一点是,要小心收发两端处理器的大小端问题!而且传输信息头里必须包含长度信息,而且通用的是大端.但是,这里的长度和结构体,我选择用小端进行传输. 3.TCPserver实现 参考了别人多线程的回调写法,看起来不错.