前言
Python语言提供了Socket套接字来实现网络通信。
Python的应用程序通常通过Socket”套接字”向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
服务器和客户端的源代码
服务器端
#coding=utf-8 #创建TCP服务器 import socket import time from time import ctime HOST = '127.0.0.1' PORT = 8080 BUFSIZE=1024 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind((HOST, PORT)) sock.listen(5) addr=(HOST,PORT) while True: print('waiting for connection...') sock,addr =sock.accept() print('...connected from:',addr) while True: data =sock.recv(BUFSIZE).decode() print('date=',data) if not data: break sock.send(('[%s] %s' %(ctime(),data)).encode()) sock.close()
客户端
#coding=utf-8 #创建TCP客户端 import socket HOST = '127.0.0.1' PORT = 8080 BUFSIZE = 1024 ADDR=(HOST,PORT) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((H<i style="color:transparent">本文来源gaodai$ma#com搞$$代**码网$</i>OST, PORT)) while True: data = input('> ') if not data: break sock.send(data.encode()) data = sock.recv(BUFSIZE).decode() if not data: break print(data) sock.close()
执行结果显示:
首先执行服务器端,结果如图1:
我们在图2中输入一些需要传输的信息,然后回车,在服务端可以看到收到了相关信息,如图4(客户端发送信息),图5(服务器端接收信息)
源代码解析
我们从服务器端开始看起,先上一部分代码:
import socket import time from time import ctime
这三句是导入了三个模块,分别是socket 模块、time模块和ctime模块。
1)socket 模块当中提供了与socket 套接字相关的各项功能,后面用到了很多,这里先介绍一个,其他一会再介绍:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
功能:创建套接字,并把创建好的套接字赋给一个变量sock,下面程序中与套接字相关的操作都由sock来完成。
格式:socket.socket([family[, type[, proto]]])
参数:
family: 套接字家族,可以使 AF_UNIX 或者 AF_INET。AF_INET,是指面向网络的,因特网;AF_UNIX,基于文件的;在本例中,我们使用AF_INET,利用因特网来进行通信。
type: 套接字类型,可以根据是面向连接的还是非连接分为 SOCK_STREAM 或 SOCK_DGRAM。
SOCK_STREAM:对应着TCP,提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。