Tcp服务器创建:
import socket
# 服务器的端口号
PORT = 9000
# 创建套接字socket对象,用于进行通讯
# scoket.SOCK_STREAM 表明使用tcp协议,流式协议
# 监听socket
server_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 为服务器的socket绑定一个固定的地址,ip和端口,元祖
address = ("", PORT)
server_sock.bind(address)
# 让服务器开启监听,可以收到客户端的连接请求
#listen参数表示监听队列的大小,最多能同时处理三次握手的客户端数量
server_sock.listen(128)
# 接受客户端的连接请求,与客户端完成三次握手
# accept函数是阻塞,如果当前没有客户端发起连接,则会阻塞等待直到有客户端发起连接
# new_sock是一个新的socket对象,用来跟这个连接的客户端进行一对一数据传输使用
# client_addr是建立连接的客户端的地址,ip和端口 元祖
new_sock, client_addr = server_sock.accept()
# print("客户端 %s 已经建立了连接"% str(client_addr))
print("客户端 %s 已经建立了连接" % (client_addr,))
# 接收客户端的数据
recv_data = new_sock.recv(1024)
print("接收到了客户端 %s 传来的数据: %s" % (client_addr, recv_data.decode()))
# 向客户端发送数据
msg = input("请输入要传给客户端的数据:")
new_sock.send(msg.encode())
# 如果没有数据再传给客户端,可以关闭连接
new_sock.close()
# 如果不想再接收新的客户端的连接请求,可以关闭server_sock
server_sock.close()
测试:
我们暂时还没有写tcp客户端,可以用nc命令来作为客户端进行测试。
# nc 服务器的IP 服务器的端口
nc 127.0.0.1 8000
TCP客户端创建:
import socket
# 创建socket对象,用于通信
client_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 对于客户端,可以不用绑定一个固定地址,使用操作系统分配的即可
# 向服务器发起连接请求, 并完成三次握手
server_addr = ("127.0.0.1", 9000)
client_sock.connect(server_addr)
# 向服务器发送数据
msg = input("请输入要发送的数据:")
client_sock.send(msg.encode())
# 接收服务器传回来的数据
recv_data = client_sock.recv(1024)
print("收到了由服务器传回的数据:%s" % recv_data.decode())
# 如果客户端不想再次发送数据,可以关闭连接
client_sock.close()
测试:
可以用我们刚才写的服务器程序,也可用nc命令进行测试
# -l参数表示服务器监听
# nc -l 绑定的服务器ip 端口
nc -l 127.0.0.1 8000