TCP

1. TCP实现网页信息获取

import socket

client = socket.socket()
client.connect(("www.baidu.com", 80))
client.send(b"GET / HTTP/1.1\r\nHost:www.baidu.com\r\nConnection:close\r\n")
recvData = client.recv(1024*100)
print(recvData.decode("utf-8"))
client.close()

2. TCP实现简易web服务器

import socket

def handler(clientObj):
    # 5. 接收客户端发送的请求
    recvData = clientObj.recv(1024)
    with open('hello.html', 'rb') as f:
        sendData = f.read()

    # 告诉浏览器http版本
    clientObj.send(b'HTTP/1.1 200 ok\r\n\r\n')
    clientObj.send(sendData)

def webServer():
    # 1. 创建socket对象
    server = socket.socket()
    # 2. 绑定端口和ip
    server.bind(('0.0.0.0', 8084))
    # 3. 监听是否有客户端连接
    server.listen(5)
    print("http服务正在启动8080........")

    while True:
        # 4. 接收客户端的连接
        clientObj, address = server.accept()
        t = threading.Thread(target=handler, args=(clientObj, ))
        t.start()

    server.close()
if __name__ == '__main__':
    webServer()

3. 基于TCP的通信

3.1 创建server服务器
	import socket
	# 1. 创建一个socket对象;
	# family指定使用IP协议的版本: IPV4:AF_INET;  ipv6: AF_INET6
	
	# type指定传输层使用的协议类型:TCP(SOCKET.SOCK_STREAM), UDP(SOCK_DGRAM)
	server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
	
	# 2. 绑定一个IP和端口, 供客户端来连接;
	server.bind(('172.25.254.250', 4002))
	
	# 3. 监听是否有客户端连接
	server.listen(5)
	print("服务端正在启动.........")
	
	# 4. 接收客户端的连接, accept() -> (socket object, address info)
	clientSocket, address = server.accept()
	print("客户端的地址:", address)
	
	# 5. 接收客户端发送的消息
	recvData = clientSocket.recv(1024)
	print("服务端接收的消息:", recvData.decode('utf-8'))
	
	# 6. 给客户端回复消息, send(self, data: **bytes***, flags: int = ...) -> int: ...
	clientSocket.send('你好, 客户端'.encode('utf-8'))
	
	# 7. 关闭服务端socket对象
	server.close()
	clientSocket.close()
3.2 创建client客户端
	import socket
	# 1. 创建一个socket对象;
	# family指定使用IP协议的版本: IPV4:AF_INET;  ipv6: AF_INET6
	# type指定传输层使用的协议类型:TCP(SOCKET.SOCK_STREAM), UDP(SOCK_DGRAM)
	client = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
	
	# 2. 连接服务端(ip, port)
	client.connect(('172.25.254.250', 4002))
	
	# 3. 给服务端回复消息, send(self, data: **bytes***, flags: int = ...) -> int: ...
	client.send("你好, 服务端".encode('utf-8'))
	
	# 4. 接收服务端回复的消息
	recvData = client.recv(1024)
	print("客户端接收的消息:", recvData.decode('utf-8'))
	
	# 7. 关闭客户端socket对象
	client.close()

4. 基于TCP的简易聊天室

4.1 创建server服务器:
	import socket
	# 1. 创建一个socket对象;
	# family指定使用IP协议的版本: IPV4:AF_INET;  ipv6: AF_INET6
	# type指定传输层使用的协议类型:TCP(SOCKET.SOCK_STREAM), UDP(SOCK_DGRAM)
	server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
	# 2. 绑定一个IP和端口, 供客户端来连接;
	server.bind(('172.25.254.250', 4006))
	# 3. 监听是否有客户端连接
	server.listen(5)
	print("服务端正在启动.........")
	# 4. 接收客户端的连接, accept() -> (socket object, address info)
	clientSocket, address = server.accept()
	print("客户端的地址:", address)
	while True:
	    # 5. 接收客户端发送的消息
	    recvData = clientSocket.recv(1024)
	    print("服务端接收的消息:", recvData.decode('utf-8'))
	    # 6. 给客户端回复消息, send(self, data: **bytes***, flags: int = ...) -> int: ...
	    sendData = input('server:>> ')
	    if not sendData:
	        continue
	    if sendData == 'quit':
	        print("聊天结束.....")
	        break
	
	    clientSocket.send(sendData.encode('utf-8'))
	# 7. 关闭服务端socket对象
	server.close()
	clientSocket.close()
4.2 创建client服务器端:
	import socket
	# 1. 创建一个socket对象;
	# family指定使用IP协议的版本: IPV4:AF_INET;  ipv6: AF_INET6
	# type指定传输层使用的协议类型:TCP(SOCKET.SOCK_STREAM), UDP(SOCK_DGRAM)
	client = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
	
	# 2. 连接服务端(ip, port)
	client.connect(('172.25.254.250', 4006))
	while True:
	    # 3. 给服务端回复消息, send(self, data: **bytes***, flags: int = ...) -> int: ...
	    sendData = input('client:>> ')
	    if not sendData:
	        continue
	    if sendData == 'quit':
	        print("聊天结束.....")
	        break
	
	    client.send(sendData.encode('utf-8'))
	
	    # 4. 接收服务端回复的消息
	    recvData = client.recv(1024)
	    print("客户端接收的消息:", recvData.decode('utf-8'))
	
	# 7. 关闭客户端socket对象
	client.close()

5. 基于多线程TCP的聊天室

5.1 实现server服务器
	import os
	import threading
	from multiprocessing import  Process
	
	def get_client_conn(clientSocket, address):
	    while True:
	        # 5. 接收客户端发送的消息
	        recvData = clientSocket.recv(1024).decode('utf-8')
	        print("服务端接收的消息:", recvData, '\n')
	
	        # os.system不能保存命令的执行结果;
	        sendData = os.popen(recvData).read()
	        clientSocket.send(sendData.encode('utf-8'))
	    clientSocket.close()
	
	import socket
	# 1. 创建一个socket对象;
	# family指定使用IP协议的版本: IPV4:AF_INET;  ipv6: AF_INET6
	# type指定传输层使用的协议类型:TCP(SOCKET.SOCK_STREAM), UDP(SOCK_DGRAM)
	server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
	# 2. 绑定一个IP和端口, 供客户端来连接;
	server.bind(('172.25.254.250', 4008))
	# 3. 监听是否有客户端连接
	server.listen(5)
	print("服务端正在启动.........")
	
	while True:
	    # 4. 接收客户端的连接, accept() -> (socket object, address info)
	    clientSocket, address = server.accept()
	    print("客户端的地址:", address)
	
	    # 使用多进程
	    t = Process(target=get_client_conn, args=(clientSocket, address))
	    t.start()
5.2 实现client客户端:
	import socket
	# 1. 创建一个socket对象;
	# family指定使用IP协议的版本: IPV4:AF_INET;  ipv6: AF_INET6
	# type指定传输层使用的协议类型:TCP(SOCKET.SOCK_STREAM), UDP(SOCK_DGRAM)
	client = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
	
	# 2. 连接服务端(ip, port)
	client.connect(('172.25.254.250', 4008))
	while True:
	    # 3. 给服务端回复消息, send(self, data: **bytes***, flags: int = ...) -> int: ...
	    sendData = input('client:>> ')
	    if not sendData:
	        continue
	    if sendData == 'quit':
	        print("聊天结束.....")
	        break
	
	    client.send(sendData.encode('utf-8'))
	
	    # 4. 接收服务端回复的消息
	    recvData = client.recv(1024)
	    print("客户端接收的消息:", recvData.decode('utf-8'))
	
		# 5. 关闭客户端socket对象
	client.close()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值