很抱歉,您没有提供需要改写的句子。请提供您希望改写的句子,我将为您改写为一个长尾词的。
- 内容介绍
- 文章标签
- 相关推荐
本文共计1251个文字,预计阅读时间需要6分钟。
一、客户端/服务器架构 + 硬件C/S架构(打印机) + 软件 C/S 架构(Web 服务) + 服务器端要求:+ 力求直接提供服务 + 需要约定一个唯一的地址,客户端可明确找到
一、客户端/服务器架构
二、基于tcp协议的简单套接字
tcp服务端
"""
import socket
IP_ADDR = ('127.0.0.1', 8001)
# 创建服务器套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 加入一条socket配置,重用ip和端口
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 把地址绑定到套接字
sock.bind(IP_ADDR)
# 监听链接
sock.listen(5)
while True: # 服务器无限循环
conn, address = sock.accept() # 接受客户端链接
print(address)
while True: # 通信循环
msg = conn.recv(1024) # 对话(接收)
conn.send(msg.upper()) # 对话(发送)
conn.close()
sock.close()
"""
tcp客户端
"""
import socket
IP_ADDR = ('127.0.0.1', 8001)
# 创建服务器套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 尝试连接服务器
sock.connect(IP_ADDR)
while True:
cmd = input('>>>').strip()
sock.send(cmd.encode('utf-8')) # 对话(发送/接收)
msg = sock.recv(1024)
print(msg)
sock.close()
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
phone.bind(('127.0.0.1', 8080))
phone.listen(5)
while True:
conn, address = phone.accept()
print(conn)
print(address)
while True:
data = conn.recv(1024)
print(data)
conn.send(data.upper())
conn.close()
conn.close()
客户端输出数字后运行结果:
<socket.socket fd=536, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8080), raddr=('127.0.0.1', 56964)>
('127.0.0.1', 56964)
b'da'
b'dasdasd'
二、粘包的现象
三、多线程编程
- 基于tcp的套接字,关键就是两个循环,一个链接循环,一个通信循环
- socketserver模块中分两大类:server类(解决链接问题)和request类(解决通信问题)
- server类
- request类
- 继承关系
class FTPserver(socketserver.BaseRequestHandler):
def handle(self):
print('dasdas',self)
print(self.request) # self.request = conn
while True: # 通信循环
data = self.request.recv(1024)
print(data)
self.request.send(data.upper())
if __name__ == '__main__':
obj = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), FTPserver)
obj.serve_forever() # 链接循环
- self.server即套接字对象
- self.request即一个链接
- self.client_address即客户端地址
基于UDP的socketserver我们自己定义的类中的
本文共计1251个文字,预计阅读时间需要6分钟。
一、客户端/服务器架构 + 硬件C/S架构(打印机) + 软件 C/S 架构(Web 服务) + 服务器端要求:+ 力求直接提供服务 + 需要约定一个唯一的地址,客户端可明确找到
一、客户端/服务器架构
二、基于tcp协议的简单套接字
tcp服务端
"""
import socket
IP_ADDR = ('127.0.0.1', 8001)
# 创建服务器套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 加入一条socket配置,重用ip和端口
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 把地址绑定到套接字
sock.bind(IP_ADDR)
# 监听链接
sock.listen(5)
while True: # 服务器无限循环
conn, address = sock.accept() # 接受客户端链接
print(address)
while True: # 通信循环
msg = conn.recv(1024) # 对话(接收)
conn.send(msg.upper()) # 对话(发送)
conn.close()
sock.close()
"""
tcp客户端
"""
import socket
IP_ADDR = ('127.0.0.1', 8001)
# 创建服务器套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 尝试连接服务器
sock.connect(IP_ADDR)
while True:
cmd = input('>>>').strip()
sock.send(cmd.encode('utf-8')) # 对话(发送/接收)
msg = sock.recv(1024)
print(msg)
sock.close()
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
phone.bind(('127.0.0.1', 8080))
phone.listen(5)
while True:
conn, address = phone.accept()
print(conn)
print(address)
while True:
data = conn.recv(1024)
print(data)
conn.send(data.upper())
conn.close()
conn.close()
客户端输出数字后运行结果:
<socket.socket fd=536, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8080), raddr=('127.0.0.1', 56964)>
('127.0.0.1', 56964)
b'da'
b'dasdasd'
二、粘包的现象
三、多线程编程
- 基于tcp的套接字,关键就是两个循环,一个链接循环,一个通信循环
- socketserver模块中分两大类:server类(解决链接问题)和request类(解决通信问题)
- server类
- request类
- 继承关系
class FTPserver(socketserver.BaseRequestHandler):
def handle(self):
print('dasdas',self)
print(self.request) # self.request = conn
while True: # 通信循环
data = self.request.recv(1024)
print(data)
self.request.send(data.upper())
if __name__ == '__main__':
obj = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), FTPserver)
obj.serve_forever() # 链接循环
- self.server即套接字对象
- self.request即一个链接
- self.client_address即客户端地址

