python 网络编程(linux 环境下面)

来源:互联网 发布:手机听歌软件 编辑:程序博客网 时间:2024/05/22 06:35

这里主要使用socket模块。

首先, 一般在每个python脚本的最开始, 添加如下语句:

#!usr/bin/env python
加上这一句, 我们就可以在terminal 下面, 写换到相关文件的目录下面, 直接执行:

./filename.py
脚本中的这一句话的目的是告诉操作系统这个脚本的解释执行程序的 。 正是因为有了这一句, 我们才能够直接执行./命令。 (否则, 没有上述的那一句话, 我们就只能按照如下命令执行:

python filename.py

另外, 执行的时候, 如果遇见permission denied等相关错误, 那是因为我们的文件不是可执行的。 我们需要执行如下命令改变未见得mode:

chmod +x filename.py 

接下来,就可以直接运行:

./filename.py
好了言归正传, 说说网络编程。

所谓的networking, 就是两个进程通过network进行通信。 无论是client to client, 还是client to server, 甚至是client to itself。

客户端/服务器模型是网络编程的基本模型。 所谓的客户端, 就是面对human 的终端器件, 所谓服务器, 就是为客户端提供service 的一个device。

客户端通过连接到server获得相关的资讯。 举个例子, 网络浏览器(client)连接到google网站(server)就是属于Client/server模型。 C/S模型是最基本的网络编程模型。 

第二个模型是Peer to peer model。  例如skype。 客户端同其他的客户端连接起来, 而没有使用central server. 

网络编程的相关术语:

Address(地址): 指代的是IP地址, 例如, ”127.0.0.1“, 也就是32位的 

Port(端口号): 表示端口号, 例如5000

  根据协议, 1——1024这些端口被保留作为核心的协议。作为固定分配给一些服务。 例如比如21端口分配给FTP(文件传输协议)服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务,135端口分配给RPC(远程过程调用)服务等等。 所以我们在套接字(socket)编程的时候, 选择的端口号必须要大于1024, 但是还要小于65535。

Socket(套接字): 套接字是支持TCP/IP 网络通信的基本操作单元, 是网络编程接口。  是一种介于应用层和运输层的编程接口抽象层。 如下图:


Socket就是一组接口, 他把TCP/IP协议簇隐藏在Socket接口后面。 对用户来说, 一组简单的接口就是全部。让Socket去组织数据, 我们不用去关心那些复杂的协议了, 大大方便我们进行网络编程开发。 

Socket的相关接口函数(Python):

socket(socket_family,  socket_type);

解释: 这是一个建构子, 创建一个新的socket。 socket_family参数, 默认值为AF_INET,  AF表示address family, 为AF_INET就代表使用IP。 也可以是AF_UNIX, AF_UNIX家族用于同一台机器上的进程间通信。 socket_type表示套接字的类型。 可以为SOCK_STREAM(流套接字), 表示使用TCP传输控制协议,  是双向可靠数据流。 也可以为SOCK_DGRAM(数据包套接字), 表示使用使用用户数据包UDP协议, 是双向不可靠数据报。

服务器的套接字的函数:

bind((hostname, port))
解释: bind 函数将有(主机IP地址, 端口号)组成的元组(tuple)绑定到套接字上。

listen()
解释: 这个方法是的该主机等待TCP链接请求, 即TCP监听。

accept()
解释: 这个函数表示接受一个链接请求, 该函数返回一个新的socket。

在client side:

connect((hostname,  port))

解释: 这个函数请求与一个listening server进行连接。

公共用途的套接字函数:

recv(buffer)
解释: 用于从一个TCP的连接中抓取数据。 buffer表示缓冲区的大小, 通常取1024。

send(bytes)
解释: 试图传送上层传递下来的数据bytes发送出去。

close()
关闭一个套接字(socket)/连接, 释放port端口。

什么是TCP:

TCP, 全称transmission control protocol。 是基于可靠连接的协议。 具有简单的差错检测(checksum)。 

TCP协议被网络浏览器, Email, SSH, FTP等等应用使用。

TCP比UDP慢。

提示: 在运行网络程序的时候, 最好在不同的电脑上执行服务器和客户端程序。 这里, 由于条件限制, 我在同一台电脑上运行。   

相关程序如下.

tcpClient.py:

#!/usr/bin/env pythonimport socketdef Main():        host = "127.0.0.1"        port = 5000        s = socket.socket()        s.connect((host, port))        message = raw_input("->")        while message != 'q':                s.send(message)                data = s.recv(1024)                print "recieved from server:" + str(data)                message = raw_input("->")        s.close()if __name__ == "__main__":        Main()                                                                                     
tcpServer.py:

#!/usr/bin/env pythonimport socketdef Main():        host = "127.0.0.1"        port = 5000        s = socket.socket()        s.bind((host, port))        s.listen(1)        c, addr = s.accept()        print "connection from:" + str(addr)        while True:                data = c.recv(1024)                if not data:                        break                print "form connected user: " + str(data)                data = str(data).upper()                print "sending: " + str(data)                c.send(data)        c.close()if __name__ == "__main__":        Main()
首先执行tcpServer.py

然后Ctrl + ALT + T 在开一个terminal: 执行tcpClient.py:



0 0
原创粉丝点击