前
tcp严格区分客户端和服务器。
使用
流程图:
客户端流程:
- 创建套接字
- 连接服务器
- 收发数据
- 关闭套接字
参考代码:
import socket
def main():
# 1.创建tcp的套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.连接服务器
# tcp_socket.connect("127.0.0.1", 1897)
server_ip = input("请输入服务器ip:")
server_port = input("请输入服务器port:")
server_addr = (server_ip, int(server_port))
tcp_socket.connect(server_addr)
# 3.发送数据/接收数据
send_data = input("请输入要发送的数据:")
tcp_socket.send(send_data.encode('utf-8'))
# 接收服务端的数据
recv_data = tcp_socket.recv(1024)
print("receive data from server is: ", recv_data)
# 4.关闭套接字
tcp_socket.close()
if __name__ == "__main__":
main()
服务端流程:
- socket创建一个套接字
- bind绑定ip和port
- listen使套接字变为可以被动连接
- accept等待客户端的连接
- recv/send接收发送数据
import socket
def main():
# 1.买个手机(创建套接字)(此处为一个监听套接字,专门负责监听。后续对于连接进来的客户端会单独创建一个套接字为其服务
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.插入手机卡(绑定本地信息)
tcp_server_socket.bind(("", 7890))
# 3.将手机设置为正常的响铃模式(让默认的套接字由主动变为被动 listen)
tcp_server_socket.listen(128)
# 4.等待别人的电话到来(等待客户端的连接accept),accept的返回值是一个元组,第一个元组用来返回一个套接字为连接进来的客户端进行服务
# 默认会堵塞,直到有客户端连接进来
new_client_socket, client_addr = tcp_server_socket.accept()
print("client address is ", client_addr)
# 接收客户端发送过来的请求
recv_data = new_client_socket.recv(1024)
print("receive data from client is :" ,recv_data)
# 回送一部分数据给客户端
new_client_socket.send("hahah--ok--".encode('utf-8'))
# 5.关闭套接字
new_client_socket.close()
tcp_server_socket.close()
if __name__ == "__main__":
main()
结果:
后记:
listen中的参数,由于操作系统处理方式不一样,所以这里写的数字暂时没有意义。尽管这个数字的大与小会有一点点影响。