python 网络编程02
一、理解socket
socket 可以看成是一个标准的文件描述符。是操作系统中I/O系统的延伸部分,它可以使进程和机器之间的通信成为可能。
文件描述符:一般是指一个文件或某个类似文件的实体。
在UNIX平台,read(),write(),dup(),dup2(),close()这样的系统调用会像为标准文件描述那样为socket工作。很多时候,程序并不需要知道它正把数据写进一个文件、终端或是一个TCP连接。
最明显就是建立socket()的方法。很多文件是通过调用open()函数来打开的。但socket是通过socket()函数建立的,并且还需要另外的调用来连接和激活它们。recv()和send()这两个系统调用和read(),write()极为相似。
二、建立socket
对于客户端来说,建立socket需要两个步骤。
1.建立socket对象
2.把它连接到远程服务器
建立socket对象时,告诉系统两件事:协议家族和通信类型。
协议家族,IPv4,IPv6,IPX/SPX,AFP;如:AF_INET和IPv4对应。
通信类型,指明用什么协议来传输数据;TCP通信对应SOCK_STREAM,UDP通信对应SOCK_DGRAM。
建立一个socket连接,一般用类似这样的代码:
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
连接socket ,需要提供一个tuple,它包括远程主机名或IP地址和远程端口。
连接一个socket,一般用类似这样的代码:
s.connect(('www.example.com',80))
三、寻找端口号
大多数操作系统都会提供一个一直服务器端口号的列表;
UNIX系统,可以在/etc/services目录下找到这个列表。
python的socket库包含一个getservbyname()的函数,它可以自动查询。
四、从socket获取信息
# -*- coding:utf-8 -*-
import socket
print "Creating socket..."
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print 'Done'
print 'Looking up port number'
port = socket.getservbyname('http','tcp')
#port = socket.getservbyname('tcp','http') # error
print 'Done'
print 'Connecting to remote host on port %d...'% port,
s.connect(('www.baidu.com',port))
print 'Done'
print 'Connected from',s.getsockname() # 本地
print 'Connected to',s.getpeername() # 远程 主机和端口号tuple
############ 结果############
Creating socket...
Done
Looking up port number
Done
Connecting to remote host on port 80... Done
Connected from ('192.168.0.140', 58783)
Connected to ('180.97.33.108', 80)
[Finished in 7.1s]
更多相关文章
- Python读取修改ini配置文件[ConfigParser]
- 用户输入从.csv文件生成新列表?
- Python文件操作大全,随机删除文件夹内的任意文件
- 当使用一个传送到另一个的python文件时,我可以将stdin与argv结合
- 从Django开发服务器的根服务提供静态文件
- Python第十天 print >> f,和fd.write()的区别 stdout的buffer 标
- 在两台服务器上有效地在两个Django应用程序之间进行通信(多租户)
- 如何使用os.listdir()忽略隐藏文件?
- 用python解析word文件(二):table