1. Create
创建一个tcp socket:import socket
#创建tcp连接
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#其中socket.AF_INET代表IPV4的,socket.SOCK_STREAM代表TCP
2. Introduction
TCP Transmission Control Protocol is a communication method. The difference from UDP is that UDP is a model for writing letters, which is not safe and data may be lost;
TCP is a model for making phone calls. , security, not 100% stable but with remedies, that is, if data is sent... TCP strictly distinguishes between client and server, UDP does not;
Client process; I don’t want to write it;
A brief introduction to TCP
3. TCP client
#TCP客户端流程
import socket
from socket import *
def main():
#创建socket
tcp_clinet_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#目的信息
server_ip=input("请输入ip:")
server_port=int(input("请输入服务器port:"))
#连接服务器
tcp_clinet_socket.connect(server_ip,server_port)
#提示用户输入数据
send_data=input("请输入要发送的数据:")
tcp_clinet_socket.send(send_data.encode("utf-8"))
#接收对方发送过来的数据,最大接收1024个字节
recvData=tcp_clinet_socket.recv(1024)
print("接受收到的数据为:",recvData.decode("gdk"))
#关闭套接字
tcp_clinet_socket.close()
if __name__=="__main__":
main()
4. TCP server
#TCP服务器流程
import socket
from socket import *
def main():
#创建socket作用是监听
tcp_server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#本地信息bind
address=('',7788)
#绑定ip和port
tcp_server_socket.bind(address)
#使用socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的链接了
tcp_server_socket.listen(128)#设置为正常可发接信息状态
#如果有新的客户端来链接服务器,那么就产生一个新的套接字专门为这个客户端服务
client_socket,clientAddr=tcp_server_socket.accept()#等待行动相当于停在这里阻塞状态,只要有一个客户端链接到则立马解阻塞
#接收对方发送来的数据
recv_data=client_socket.recv(1024)
print('接到的数据为:',recv_data.decode('gdk'))
#发送一些数据到客户端
client_socket.send("thank you!".encode('utf-8'))
#关闭套接字
client_socket.close()
tcp_server_socket.close()
if __name__=="__main__":
main()
5. Loop to serve multiple clients
#TCP循环多客服服务
import socket
from socket import *
def main():
#创建socket作用是监听
tcp_server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#本地信息bind
address=('',7788)
#绑定ip和port
tcp_server_socket.bind(address)
#使用socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的链接了
tcp_server_socket.listen(128)#设置为正常可发接信息状态
while True:
#如果有新的客户端来链接服务器,那么就产生一个新的套接字专门为这个客户端服务
client_socket,clientAddr=tcp_server_socket.accept()#等待行动相当于停在这里阻塞状态,只要有一个客户端链接到则立马解阻塞
while True:#为一个客户端循环服务多次
#接收对方发送来的数据
recv_data=client_socket.recv(1024)
print('接到的数据为:',recv_data.decode('gdk'))
#发送一些数据到客户端
client_socket.send("thank you!".encode('utf-8'))
#关闭套接字
client_socket.close()
tcp_server_socket.close()
if __name__=="__main__":
main()
6. Serve multiple clients
#TCP循环多客服服务
import socket
from socket import *
def main():
#创建socket作用是监听
tcp_server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#本地信息bind
address=('',7788)
#绑定ip和port
tcp_server_socket.bind(address)
#使用socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的链接了
tcp_server_socket.listen(128)#设置为正常可发接信息状态
while True:
#如果有新的客户端来链接服务器,那么就产生一个新的套接字专门为这个客户端服务
client_socket,clientAddr=tcp_server_socket.accept()#等待行动相当于停在这里阻塞状态,只要有一个客户端链接到则立马解阻塞
while True:#为一个客户端循环服务多次
#接收对方发送来的数据
recv_data=client_socket.recv(1024)#当recv_data有数据说明解阻塞并发来数据如果为空则说明解阻塞且客户端结束服务
print('接到的数据为:',recv_data.decode('gdk'))
if recv_data:#某值或none
#发送一些数据到客户端
client_socket.send("thank you!".encode('utf-8'))
else:
break
#关闭套接字
client_socket.close()
tcp_server_socket.close()
if __name__=="__main__":
main()