网络编程

您所在的位置:网站首页 dnf60版本服务端搭建 网络编程

网络编程

2024-01-18 19:52| 来源: 网络整理| 查看: 265

一:TCP客户端搭建过程: 1:创建socket套接字 2:链接服务器 3:收发数据 4:关闭套接字

import socket def main(): # 1:创建套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2:链接服务器 server_ip = input("请输入服务器的地址:") server_port = input("请输入服务器的端口:") server_addr = (server_ip, server_port) tcp_socket.connect(server_addr) # 3:发送数据: send_data = input("请输入要发送的数据:") tcp_socket.send(send_data.encode("utf-8")) # 4:关闭套接字 tcp_socket.close() if __name__ == "__main__": main()

二:TCP服务器搭建流程: 服务器的特点:端口和IP地址必须绑定(固定的) 1:创建套接字(买了个手机 socket) 2:绑定本地信息(给手机插上卡 bind) 3:设置套接字主动为被动(手机为响铃模式 listen) 4:等待客户端链接(等别人打电话 accept) 5: 接收客户端发送的数据 6:返回客户端一些信息。 7:关闭两个套接字

注:监听套接字:负责监听等待客户端的链接。accept产生的套接字:负责服务客户端。

import socket def main(): # 1:创建套接字 tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 2:绑定本地信息 tcp_socket.bind(("192.168.24.32", 7788)) # 3:设置监听状态 tcp_socket.listen(128) # 4: 等待客户端链接 new_socket, client_addr = tcp_socket.accept() print(client_addr) # 5: 接收客户端的数据: client_data = new_socket.recv(1024) print(client_data) # 6:返回给客户端数据: new_socket.send("hahah".encode("utf-8")) # 7:关闭socket套接字 tcp_socket.close() new_socket.close() if __name__ == "__main__": main()

三:TCP服务器循环为多个客户端服务,并且一个客户可以服务多次。

import socket def main(): # 1:创建套接字 tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 2:绑定本地信息 tcp_socket.bind(("192.168.24.32", 7788)) # 3:设置监听状态 tcp_socket.listen(128) while True: # 4: 等待客户端链接 new_socket, client_addr = tcp_socket.accept() print(client_addr) # 5: 接收客户端的数据: client_data = new_socket.recv(1024) print(client_data) # 6:返回给客户端数据: new_socket.send("hahah".encode("utf-8")) # 7:关闭socket套接字 new_socket.close() tcp_socket.close() if __name__ == "__main__": main()

这个代码可以循环为多个客户端服务,但是必须等待上一个客户端服务完成,才能轮到下一个客户端服务。

import socket def main(): # 1:创建套接字 tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 2:绑定本地信息 tcp_socket.bind(("192.168.24.32", 7788)) # 3:设置监听状态 tcp_socket.listen(128) while True: # 4: 等待客户端链接 new_socket, client_addr = tcp_socket.accept() print(client_addr) while True: # 5: 接收客户端的数据: client_data = new_socket.recv(1024) print(client_data) if client_data: # 6:返回给客户端数据: new_socket.send("hahah".encode("utf-8")) else: break # 7:关闭socket套接字 new_socket.close() tcp_socket.close() if __name__ == "__main__": main()

解释:外层循环是保证服务器可以服务个客户端,而内层循环是保证同一个客户端可以服务多次。 什么时间说明客户端服务完毕了呢? 答:new_socket.recv(1024):recv解阻塞有两种方式:一种是客户端发送数据过来,另一种是客户端关闭,当客户端关闭的时候,recv解阻塞,此时client此时接收到一个空的数据。(只有客户端关闭 的时候,服务器会收到空数据,客户端不会发送空数据)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3