初试python网络通信
来源:互联网 发布:网络语言暴力后果 编辑:程序博客网 时间:2024/06/06 14:12
Python网络通信
网络通信你怕不怕,相当厉害的技能!今天从《Python标准库》第5章直接跳到了第11章——网络通信。
然后实现了TCP/IP客户和服务器,以及UDP客户和服务器实现。网络部分之前有所了解,但是不够深入。应用层几个最具代表性的协议了解一下,不过年代久远,而且当时没有动手实践。今天最终实现了,也算是亡羊补牢?来记录下今天实现的东西
TCP/IP
基于socket库实现。
书上代码如下
import socketimport sys#Create a TCP/IP socketsock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)server_name = sys.argv[1]server_address = (server_name,10002)print >>sys.stderr,'starting up on %s port %s '%server_addresssock.bind(server_address)sock.listen(1)while True: print >>sys.stderr,'waiting for a connection' connection,client_address = sock.accept() try: print >>sys.stderr,'connection from',client_address while True: data = connection.recv(16) print >>sys.stderr,'received "%s" ' % data if data: print >>sys.stderr,'sending data back to the client' connection.sendall(data) else: print >>sys.stderr,'no data from',client_address break finally: connection.close()
这是服务器的,主体思想是先建立一个socket,然后绑定一个端口,然后监听。非常清楚,感谢之前各位已经造好轮子的dalao们。
顺便说下,书上所用端口是10000,我改成了10002,原因是会报错,socket error 10048 查了一下发现应该是端口被用了,所以改了
然后下面是客户的示例:
import socketimport sysdef get_constans(prefix): """Create a dictionary mapping socket module constants to their name """ return dict((getattr(socket,n),n) for n in dir(socket) if n.startswith(prefix) )families = get_constans('AF_')types = get_constans('SOCK_')protocols = get_constans('IPPROTO_')sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)server_address = (sys.argv[1],10002)sock.connect(server_address)try: message = 'Oh here is my first try to make a server and client.It is so cooooooooooool' sock.send(message) amount_received = 0 amount_expected = len(message) while amount_received<amount_expected: data = sock.recv(16) amount_expected += len(data) print >>sys.stderr,' received "%s" '%data
这样就实现了一个TCP/IP的客户和服务器。这个两个需要cmd运行,并且提供一个地址。我用的是自己的IP地址,当然好多细节还是需要日后去了解。我的一小步,日后的一大步。
下面是udp的了。
UDP
udp和tcp/ip 在服务器上的差异在于 sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
上面的是udp,下面是tcp sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
好像tcp和udp关于报文的长短格式也是有差异。
这些以后复习了再记录吧。
客户端的差异,从模型而言。tcp连接需要三次握手,udp不要。
所以tcp的客服端连接为 server_address = (sys.argv[1],10002)
sock.connect(server_address)
udp直接
send to 就可以了. sent = sock.sendto(message,server_address)
接收方面,一个是recv()
此乃tcp的,一个是recvfrom()
,此乃udp的
差不多就是这些东西了。
还要点问题是关于书中所讲的 IP地址表示 一节
我还是没有猜出来 inet_ntoa
和inet_aton
中的a和n分别是什么
还得找人问下。
现在4.30还可以继续看下去。有趣有趣!
- 初试python网络通信
- Python 网络爬虫 初试
- python初试
- 初学python:网络通信
- Python网络爬虫2 ---- scrapy爬虫架构介绍和初试
- python实现socket网络通信
- 初试Retrofit网络请求
- 网络爬虫初试
- C++调用Python初试
- Python与Selenium初试
- python爬虫初试
- Python爬虫初试
- python 爬虫初试
- Python学习笔记(六)网络通信
- Python进阶之网络通信过程再现
- WireShark使用和网络初试
- 初试网络爬虫(1)
- 初试CGI编程--python篇
- 修改Tomcat服务中的端口配置
- VIP视频解析工具 Android版
- String类的20种常见方法
- 回文质数
- 设计模式——享元模式
- 初试python网络通信
- 11
- redis分布式锁处理并发问题
- new delete 基础应用
- Sublime text 3使用
- 搭建了一个自学编程的论坛,大家多来捧场
- Spring技术核心内幕 读书笔记--IOC容器的实现小结
- java基础笔记
- Oracle误删表空间数据文件报错