TCP和UDP的学习

UDP

UDP收发数据

注意:

udp接收方必须绑定端口,发送方不必绑定端口
import socket

u = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

u.bind(("192.168.182.130", 6666))

while True:
    data = input("输入数据:")
    if data == "ESC":
        break
    u.sendto(data.encode("utf8"), ('192.168.2.101', 8080))
    rec_data = u.recvfrom(1024)
    print("receive:{}".format(rec_data[0].decode("utf8")))

u.close()

TCP

TCP客户端基本实现

import socket


def main():
    # 1.创建tcp套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 2.连接服务器
    server_adrress = ("192.168.182.130", 55992)
    tcp_socket.connect(server_adrress)
    
    # 3.发送数据
    data = input("send:")
    tcp_socket.send(data.encode("utf8"))
    
    # 4.关闭套接字
    recv_data = tcp_socket.recv(1024)
    print(recv_data)
    tcp_socket.close()


if __name__ == '__main__':
    main()

TCP服务器端基本实现

import socket


def main():
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    tcp_socket.bind(("192.168.182.130", 55992))
    tcp_socket.listen(128)
    while True:
        new_client_socket, client_address = tcp_socket.accept()
        while True:
            recv_data = new_client_socket.recv(1024)
            # 判断客户端是否调用close()
            if recv_data:
                if recv_data != "exit":
                    print("recv:{}".format(recv_data.decode("utf8")))
                    new_client_socket.send("received".encode("utf8"))
                else:
                    break
            else:
                break

        new_client_socket.close()
    tcp_socket.close()


if __name__ == '__main__':
    main()

注意

tcp服务器方必须绑定端口,客户端方一般不绑定端口

文件下载器TCP简单实现

客户端方


import socket


def main():
    tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_adrress = ("10.3.126.144", 5599)
    tcp_client.connect(server_adrress)
    data = input("input a file name to download:")
    tcp_client.send(data.encode("utf8"))
    recv_data = tcp_client.recv(1024)
    if recv_data:
        with open("recv" + data.split("\\")[-1], "wb") as f:
            f.write(recv_data)
    tcp_client.close()



if __name__ == '__main__':
    main()

服务器方

import socket
import os


def main():
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_socket.bind(("10.3.126.144", 5599))
    tcp_socket.listen(128)
    while True:
        new_client_socket, client_address = tcp_socket.accept()
        while True:
            recv_data = new_client_socket.recv(1024)
            if recv_data:
                if recv_data != "exit":
                    path = recv_data.decode("utf8")
                    print("recv:{}".format(path))
                    if os.path.exists(path):
                        print("文件传输中...")
                        with open(path, "rb") as f:
                            data = f.read()
                            new_client_socket.send(data)
                    else:
                        break
                else:
                    break
            else:
                break

        new_client_socket.close()
    tcp_socket.close()


if __name__ == '__main__':
    main()

猜你喜欢

转载自blog.csdn.net/he_yang_/article/details/89542196