tcp的三次握手四次挥手时序:
1简单tcp客户端,实现一个最简单最简陋的客户端:
# tcp客户端
from socket import *
# 1创建套接字
tcp_socket = socket(AF_INET,SOCK_STREAM)
# 2绑定端口
ip = input('请输入要连接服务器ip:')
port = int(input('请输入要连接服务器端口:'))
# 3连接服务器
tcp_socket.connect((ip,port))
# 4发送接收数据
send_data = input('请输入要传送数据:')
send_data = send_data.encode('utf-8')
tcp_socket.send(send_data)
recv_data = tcp_socket.recv(1024)
recv_data = recv_data.decode('utf-8')
print(recv_data)
# 5关闭套接字
tcp_socket.close()
2简单tcp服务端,实现一个最简单最简陋的服务端:
# 1创建套接字
import socket
tcp_socket_host = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 服务器端口回收操作(释放端口)
tcp_socket_host.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
# 2绑定端口
tcp_socket_host.bind(('',8080))
# 3监听 变为被动套接字
tcp_socket_host.listen(128) #128可以监听的最大数量,最大链接数
# 4等待客户端连接
socket_fuwu,addr_client=tcp_socket_host.accept() #accept(new_socket,addr)
print(socket_fuwu)
print(addr_client)
# 5读写
recv_data = socket_fuwu.recv(1024)
print(recv_data.decode('utf-8'))
seng_data = '你是好人'
socket_fuwu.send(seng_data.encode('utf-8'))
#6服务套接字关闭
socket_fuwu.close() #服务器一般不关闭
3多线程实现tcp服务端:
# 1创建套接字
import socket
import threading
def read(socket_fuwu):
while True:
recv_data = socket_fuwu.recv(1024)
if recv_data:
print('收到的信息:',recv_data.decode('gbk')) #因为在window测试,所以使用gbk编码规则
def write(socket_fuwu):
while True:
seng_data = input('请输入要发送的:')
if seng_data:
socket_fuwu.send(seng_data.encode('gbk'))
def main():
tcp_socket_host = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 服务器端口回收操作(释放端口)
tcp_socket_host.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
# 2绑定端口
tcp_socket_host.bind(('',8080))
# 3监听 变为被动套接字
tcp_socket_host.listen(128) #128可以监听的最大数量,最大链接数
# 4等待客户端连接
socket_fuwu,addr_client=tcp_socket_host.accept() #accept(new_socket,addr)
print(socket_fuwu)
print(addr_client)
t1=threading.Thread(target=read,args=(socket_fuwu,))
t2=threading.Thread(target=write,args=(socket_fuwu,))
t1.start()
t2.start()
#6服务套接字关闭
# socket_fuwu.close() #服务器一般不关闭 此时服务端口因为需要一直执行所以也不能关闭
if __name__ == '__main__':
main()