Python || 网络编程

Python3的TCP编程:客户端功能是创建socket对象并建立TCP连接、发送请求、接收服务器返回的数据并进行处理

#导入socket库
import socket
#根据指定的IP与TCP协议创建一个socket对象
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#利用socket对象创建TCP连接
s.connect(("www.sohu.com",80))
#向服务器发送请求
s.send(b"GET / HTTP/1.1\r\nHost:www.sohu.com\r\nConnection:close\r\n\r\n")
#处理返回的数据
buffer = []
while True:
    #一次最多写入1k字节的数据
    d = s.recv(1024)
    if d:
        buffer.append(d)
    else:
        break
data = b"".join(buffer)
#关闭socket连接
s.close()
#将保存在内存中的数据写入磁盘
header,html = data.split(b"\r\n\r\n",1)
print(header.decode("utf-8"))
with open("sohu.html","wb") as f:
    f.write(html)

一、简单服务器

import socket
import time
import threading

#每个TCP连接都创建新的线程来处理,使服务器可以同时处理多个TCP连接
def tcplink(sock, addr):
    print("Accept new connection from %s:%s..." % addr)
    sock.send(b"Welcome!")
    while True:
        data = sock.recv(1024)
        time.sleep(1)
        #如果没有数据传入或者传入字符串`exit`,便退出循环
        if not data or data.decode("utf-8") == "exit":
            break
        sock.send(("Hello, %s!" % data.decode("utf-8")).encode("utf-8"))
    #关闭本次socket,结束线程的调用
    sock.close()
    print("Connection from %s:%s closed." % addr)
#创建一个主Socket用来绑定并监听请求
s =socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#绑定IP地址与监听的端口号
s.bind(("127.0.0.1", 9898))
#调用listen()方法监听端口,传入的参数指定等待连接的最大数量
s.listen(5)
print("waiting new connection...")
#服务器通过死循环来接收来自客户端的连接请求
while True:
    #accept()会等待并返回一个客户端的连接
    sock, addr = s.accept()
    #创建新线程来处理TCP连接,返回主线程,主线程继续接收连接请求
    t = threading.Thread(target=tcplink, args=(sock, addr))
    #新线程开始处理TCP连接,调用tcplink方法处理
    t.start()

二、用于测试的简单客户端

import socket
#创建socket并连接至服务器
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1", 9898))
print(s.recv(1024).decode("utf-8"))
#向服务器发送数据
for data in [b"Tracy", b"Mike", b"Sarah"]:
    s.send(data)
    print(s.recv(1024).decode("utf-8"))
#退出连接
s.send(b"exit")
s.close()

服务器程序会一直运行下去,等待下一个连接;客户端程序执行完毕后便退出,关闭socket


Python || 网络编程_第1张图片
server

Python || 网络编程_第2张图片
client

你可能感兴趣的:(Python || 网络编程)