tcp客户端和服务器的编写

相比UDP,tcp是面向连接的,分为客户端和服务端的两种编写方式,而且相对来说更加复杂
客户端的编写
tcp_client.py

import socket

def main():
    tcp_socket =  socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    server_ip = input("请输入服务器ip:")
    server_port = int(input("请输入服务器端口:"))
    server_addr = (server_ip,server_port)
    #对目标服务器进行连接
    tcp_socket.connect(server_addr)
    send_data = input("请输入要发送的数据:")
    #由于已经熟知了对方的IP和端口那么
    tcp_socket.send(send_data.encode("utf-8"))

    tcp_socket.close()
if __name__ == "__main__":
    main()

服务器的编写就要考虑很多东西了,比如需要给多个用户提供服务,需要给单个用户多次提供服务。
tcp_server.py

import socket

def main():
    tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    tcp_server_socket.bind(("",7788))
    #需要对端口进行监听
    tcp_server_socket.listen(128)
    #第一层循环保证可以让多个客户端多次连接,因为没有使用多进程编写因此目前还只能一次为一个客户端服务,但是可以让多个客户端连接
    while True:
    	#对前来访问的客户端,就会返回一个新的套接字和客户端的信息
        new_client_socket,client_addr =tcp_server_socket.accept()
        print(client_addr)
        #第二层循环是为了保证一个客户端多次进行请求
        while True:
           #这里使用recv是因为已经知道对方的信息
            recv_data = new_client_socket.recv(1024)
            print(recv_data)
            if recv_data :
                new_client_socket.send("tangsai is good".encode("utf-8"))
            else:
                break
        new_client_socket.close()
    tcp_server_socket.close()
if __name__ == "__main__":
    main()

本次没有使用多进程进行编写,对于异常的捕获没有使用,此外对于用户身份的校检也是没有进行的。

猜你喜欢

转载自blog.csdn.net/qq_32585565/article/details/84064013