一、理解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]

更多相关文章

  1. Python读取修改ini配置文件[ConfigParser]
  2. 用户输入从.csv文件生成新列表?
  3. Python文件操作大全,随机删除文件夹内的任意文件
  4. 当使用一个传送到另一个的python文件时,我可以将stdin与argv结合
  5. 从Django开发服务器的根服务提供静态文件
  6. Python第十天 print >> f,和fd.write()的区别 stdout的buffer 标
  7. 在两台服务器上有效地在两个Django应用程序之间进行通信(多租户)
  8. 如何使用os.listdir()忽略隐藏文件?
  9. 用python解析word文件(二):table

随机推荐

  1. Ruby如何生成随机数
  2. 为什么安全编码标准很重要
  3. 如何编写C程序?C程序的基本编写规则
  4. 什么是C#接口
  5. c语言中什么是转义字符
  6. c++检查两个二进制搜索树是否相同
  7. 什么是Ruby
  8. .NET是什么
  9. 如何在Linux上安装Ruby
  10. 源代码是什么