《python核心编程》之“网络编程”

本文主要是使用socket模块。

模块函数socket()

要创建套接字,必须使用 socket.socket()函数。该函数的语法如下:

socket.socket(socket_family, socket_type, protocol=0)

其中socket_family 是地址簇,可为以下值:

  • AF_UNIX
  • AF_INET(IPv4)

socket_type 为类型,可为以下值:

  • SOCK_STREAM (使用 TCP 传输控制协议)
  • SOCK_DGRAM(使用 UDP 传输控制协议)

创建TCP实例代码如下:

from socket import  *
tcpSerSock = socket(AF_INET, SOCK_STREAM)

创建失败会抛出socket.error异常,这里需要进行捕获。

from socket import *
import sys

try:
    tcpSerSock = socket(AF_INET, SOCK_STREAM)
    print "Created"
except error as err:
    print err
        sys.exit()

内置方法(常用)

名称描述
服务器套接字方法
s.bind()将地址(主机、端口对)绑定到套接字
s.listen()设置并启动TCP监听
s.accept()被动接受TCP客户端连接,一直等待,直到连接到达(阻塞)
客户端套接字方法
s.connect()主动发起TCP服务器连接
公共用途的套接字方法
s.resv()接受TCP消息
s.send()发送TCP消息
s.close()关闭套接字
s.getsockname()当前套接字的地址

创建一个TCP服务器(这里是简单的单线程)

TCP服务器会等待请求,一旦接收到一个连接,accept() 函数就会返回一个单独的客户端套接字用户后续的通讯。当客户端关闭连接后,服务器继续等待下一个客户的连接。

文件 tsTserv.py创建一个TCP服务器程序,将客户端发来的字符串加上时间戳返回给客户端。

from socket import *
from time import ctime

HOST = '127.0.0.1'  # 运行在本机上,这里的HOST填写127.0.0.1或localhost
PORT = 21567  # 端口号
BUFSIZ = 1024  # 数据大小
ADDR = (HOST, PORT)

# 地址簇 : AF_INET (IPv4), 类型: SOCK_STREAM (使用 TCP 传输控制协议)
tcpSerSock = socket(AF_INET, SOCK_STREAM)  
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)

while True:  # 无线循环
    print 'waiting for connection...'
    tcpCliSock, addr = tcpSerSock.accept()
    print '...connected from:', addr

    while True:
        data = tcpCliSock.recv(BUFSIZ)
        if not data:
            break
        tcpCliSock.send('[%s] %s' % (ctime(), data))
    tcpCliSock.close()
tcpSerSock.close()

创建TCP客户端

客户端文件 tsTclnt.py提示用户输入要传给服务器的信息,然后显示服务器返回的数据。

from socket import *

HOST = '127.0.0.1'  # 在本机运行就要和tsTserv.py中相同,在其他机器运行,就要填写服务器所在的ip
PORT = 21567  # 端口号必须和以上保持一致
BUFSIZ = 1024
ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)

while True:
    data = raw_input(">")
    if not data:  # 用户无输入,则关闭客户端
        break
    tcpCliSock.send(data)
    data = tcpCliSock.recv(BUFSIZ)
    if not data:
        break
    print data
tcpCliSock.close()

运行客户端和TCP服务器

需要先启动服务器,然后再启动客户端。

这是测试结果:


3248493-4a597675ee2ae7f1.png
image.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值