python用socket实现聊天功能:主要分为两个部分,一部分为服务器端,一部分为服务器端,之间能够进行简易的聊天。
详细总结了tcp的注意点。
tcp注意点
1、TCP 服务器一般情况下都需要绑定端口号,否则客户端找不到这个服务器
2、TCP 客户端一般不绑定端口号,使用随机生成的端口号即可
3、TCP 服务器中通过 listen 可以将 socket 创建出来的主动套接字变为被动的,这是做 TCP 服务器时必须要做的
4、当 TCP 客户端和服务端建立好连接才可以收发数据,UDP 是不需要建立连接,直接就可以发送数据当一个 TCP 客户端和服务端连接成功后,服务器端会有1个新的套接字,这个套接字用来标记这个客户端,单独为这个客户端服务
5、listen 后的套接字是被动套接字,用来接收新的客户端的链接请求的,而accept返回的新套接字是标记这个新客户端的关闭 listen 后的套接字意味着被动套接字关闭了,会导致新的客户端不能够链接服务器,但是之前已经链接成功的客户端正常通信。
6、关闭 accept 返回的套接字意味着这个客户端已经服务完毕
7、当客户端的套接字调用 close 后,服务器端会 recv 解堵塞,并且返回的长度为0,因此服务器可以通过返回数据的长度来区别客户端是否已经下线
服务器代码部分
# 创建套接字
# 绑定本地信息
# 设为监听模式
# 接收客户端请求
# 处理客户端请求信息
# 关闭套接字
import socket
# 创建套接字
tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 绑定本地信息
tcp_socket.bind(("127.0.0.1",8080))
# 设为监听模式
tcp_socket.listen()
# 接收客户端请求
client,client_port = tcp_socket.accept()
while True:
# 处理客户端请求信息
client_info = client.recv(1024)
print("%s=>%s" %(client_port,client_info.decode("utf-8")))
# 向客户端返回响应的信息
client.send("copy that!\n".encode("utf-8"))
# 关闭套接字
client.close()
tcp_socket.close()
客户端代码部分
# 建立套接字
# 连接服务器
# 向服务器发送信息
# 接受服务器返回信息
# 关闭套接字
import socket
# 建立套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
tcp_socket.connect(("127.0.0.1",8080))
# 向服务器发送信息
tcp_socket.send("qw".encode("utf-8"))
# 接受服务器返回信息
rece_info = tcp_socket.recv(1024)
print(rece_info.decode("utf-8"))
# 关闭套接字
tcp_socket.close()