TCP协议的简单实现
程序员文章站
2022-07-10 13:54:52
...
客户端
首先,客户端与服务端进行通信,这里要先经过三次握手建立连接,第一次客户端发送请求(我要和你通信了,行不行啊?),第二次服务器端接收到请求就回复(可以啊),第三次客户端再向服务端发送请求确认(我要发数据啦,准备接收啦)
当客户端断开连接后,虽然断开了,并不是真正的断开,其实这里还有四次挥手过程。首先客户端发送请求(我要和你拜拜了),然后服务端接收到数据回复(嗯,好的),然后再次服务端又发一个回复(拜拜就拜拜,滚吧你),客户端收到后回复(哼,垃圾),再经过四次挥手后,客户端和服务端才是真正的断开连接。
from socket import *
# AF_INET代表地址家族:因特网 ,SOCK_STREAM代表面向连接的套接字
tcp_server_socket=socket(AF_INET,SOCK_STREAM)
# 绑定服务器的ip和端口
tcp_server_socket.bind(('192.168.225.1',65531))
# 监听客户端请求的套接字,128代表请求连接的上限
tcp_server_socket.listen(128)
while True:
# 生成收发数据的套接字和获取客户端的ip端口信息
client_socket,client_addr=tcp_server_socket.accept()
# 接收数据1024字节
recv_data=client_socket.recv(1024)
print("接收到的数据:%s" % str(recv_data.decode("utf-8")))
print("访问的客户端地址 %s" % str(client_addr))
# 关闭套接字资源
client_socket.close()
# 关闭套接字资源
tcp_server_socket.close()
服务器端
首先服务器端会有一个socket套接字一直在监视,等待客户端发来的第一次请求,若有新的客户端来请求,将其交给另一个socket套接字,建立三次握手后,这个套接字会一直负责和这个客户端进行数据的传输和通信。
以下是用python实现的tcp协议
from socket import *
# AF_INET代表地址家族:因特网 ,SOCK_STREAM代表面向连接的套接字
tcp_client_socket=socket(AF_INET,SOCK_STREAM)
# 客户端要请求的服务端的ip和端口
tcp_client_socket.connect(('192.168.225.1',65531))
send_data=input("输入要发的数据:")
# 对要发送的数据进行编码
tcp_client_socket.send(send_data.encode("utf-8"))
# 关闭套接字资源
tcp_client_socket.close()
下一篇: 剑指 offer之反转链表_java