赞
踩
1.使用python中的socket模块中包含TCP协议的方法实现客户端和服务端间的通信
2.理解socket中TCP协议和UDP协议之间方法的区别
3.实现简单的数据传输(文本,图片)
操作 | 结果 | 备注 | |
---|---|---|---|
socket.socket( family, type ) | 创建socket实例对象; family参数代表地址家族,可为AF_INET或AF_UNIX。type参数代表套接字类型,可为SOCK_STREAM(TCP流套接字)和SOCK_DGRAM(UDP数据报套接字) | family : {AF_INET:Internet地址; AF_UNIX:同一台机器上的进程间通信 };SOCK_STREAM: (TCP流套接字); SOCK_DGRAM:UDP数据报套接字 | |
server_socket.bind(server_address) | 将socket绑定到指定IP地址端口号;server_address:格式为元组 (host,port) | host代表主机,port代表端口号 | |
server_socket.listen(serverNum) | 使用socket套接字的listen方法接收连接请求 ;serverNum参数表示指定最多允许多少个客户连接到服务器 | serverNum的值至少为1。收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求 | |
server_socket.accept() | 务器套接字通过socket的accept方法等待客户请求一个连接;返回一个含有两个元素的 元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址 | 调用accept方法时,socket会时入“waiting”状态。客户请求连接时,方法建立连接并返回服务器 | |
connection.send(bytes(msg, ‘utf-8’)) | 服务器调用send,并采用字符串形式向客户发送信息,返回已发送的字符个数。 |
- **第一步: 调用socket构造函数 socket.socket( family, type ),创建socket对象**
- server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-
- **第二步:将socket绑定到指定地址, address地址必须是一个双元素元组,格式是(host,port)。host代表主机,port代表端口号**
- server_address = ('127.0.0.1', 8080)
- server_socket.bind(server_address)
-
- **第三步:使用socket套接字的listen方法接收连接请求 参数表示指定最多允许多少个客户连接到服务器。它的值至少为1。收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求**
- server_socket.listen(5)
-
- **第四步:服务器套接字通过socket的accept方法等待客户请求一个连接**
- connection, address = server_socket.accept()
-
- **第五步是处理阶段,服务器和客户端通过send和recv方法通信(传输 数据)。服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的字符个数**
- connection.send(bytes(msg, 'utf-8'))
- import socket
- from time import ctime
-
- print("=====================时间戳TCP服务器=====================");
-
- HOST = '' # 主机号为空白表示可以使用任何可用的地址。
- PORT = 21567 # 端口号
- BUFSIZ = 1024 # 接收数据缓冲大小
- ADDR = (HOST, PORT)
-
- tcpSerSock = socket(socket.AF_INET, socket.SOCK_STREAM) # 1.创建TCP服务器套接字
- tcpSerSock.bind(ADDR) # 2.套接字与地址绑定
- tcpSerSock.listen(5) # 3.监听连接,同时连接请求的最大数目
-
- while True:
- print('等待客户端的连接...')
- tcpCliSock, addr = tcpSerSock.accept() # 4.接收客户端连接请求
- print('取得连接:', addr)
-
- while True:
- data = tcpCliSock.recv(BUFSIZ) # 连续接收指定字节的数据,接收到的是字节数组
- if not data: # 如果数据空白,则表示客户端退出,所以退出接收
- break
- tcpCliSock.send('[%s] %s' % (ctime(), data)) # 5.向客户端发送时间戳数据
-
- tcpCliSock.close() # 关闭与客户端的连接
-
- tcpSerSock.close() #关闭服务器socket
-
- from socket import *
-
- print("=====================TCP客户端=====================");
-
- HOST = '127.0.0.1' # 服务器ip地址,等价于localhost
- PORT = 21567 # 通信端口号
- BUFSIZ = 1024 # 接收数据缓冲大小
- ADDR = (HOST, PORT)
-
- tcpCliSock = socket(AF_INET, SOCK_STREAM) # 创建客户端套接字
- tcpCliSock.connect(ADDR) # 发起TCP连接
-
- while True:
- data = input('> ') # 接收用户输入
- if not data: # 如果用户输入为空,直接回车就会发送"",""就是代表false
- break
- tcpCliSock.send(bytes(data, 'utf-8')) # 客户端发送消息,必须发送字节数组
- data = tcpCliSock.recv(BUFSIZ) # 接收回应消息,接收到的是字节数组
- if not data: # 如果接收服务器信息失败,或没有消息回应
- break
- print(data.decode('utf-8')) # 打印回应消息,或者str(data,"utf-8")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。