网络编程(tcp,udp)客服端+服务器

tcp服务器

import socket


def main():
    #1.买个手机(创建套接字 socket)
    tcp__server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #2.插入手机卡(绑定本地信息)
    tcp__server_socket.bind(("",7890))
    #3.将手机设置为正常的响铃模式(让默认的套接字由主动变为被动 listen)
    tcp__server_socket.listen(128)#  最多监听128个
    #4.等待别人的电话到来(等待客服端的链接)
    new_client_socket,client_addr=tcp__server_socket.accept()#  元组拆包
    recv_data=new_client_socket.recv(1024)
    #回送一部分数据给客服端
    new_client_socket.send("hahha".encode("gbk"))
    #关闭套接字
    new_client_socket.close()
    tcp__server_socket.close()

if __name__=="__main__":
    main()
    print("tcp")

tcp客户端

import socket
tcp_client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#server_ip=input("请输入ip地址:")
#server_port=input("请输入端口号:")
server_ip="192.168.124.1"
server_port=8080
tcp_client_socket.connect((server_ip,server_port))#server_ip必须为字符串

tcp服务器升级

import socket


def main():
    #1.买个手机(创建套接字 socket)
    tcp__server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #2.插入手机卡(绑定本地信息)
    tcp__server_socket.bind(("",7890))
    #3.将手机设置为正常的响铃模式(让默认的套接字由主动变为被动 listen)
    tcp__server_socket.listen(128)#  一般写128个
    while True:
        print("------等待一个新的服务对象:")
        #4.等待别人的电话到来(等待客服端的链接)
        new_client_socket,client_addr=tcp__server_socket.accept()#  元组拆包
        print("------新的服务对象已经到来:")
        while True:

            #recv只有数据,recvfrom不只有数据,还有发送方信息
            recv_data=new_client_socket.recv(1024)
            print("接受到的数据:%s"%str(recv_data.decode("gbk")))
            #如果recv截堵塞,那么有两种方式:
            #1.客户端发过来数据
            #2.客服端调用close导致了这里recv截堵塞
            if recv_data:
                #回送一部分数据给客服端
                new_client_socket.send("hahha".encode("gbk"))
            else:
                break
        #关闭套接字
        new_client_socket.close()
    tcp__server_socket.close()

if __name__=="__main__":
    main()
    print("tcp")

udp发送端

import socket
def main():
    while True:
        #创建一个udp套接字
        udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
        #可以使用套接字手发数据
        #udp_socket.sendto(b"发送的消息",("对方ip",端口号))
        # udp_socket.sendto(b"hahagfgkjkhjkghjh",("192.168.244.1",8080))
        str=input("请输入要输入的数据:")
        #如果输入的是exit,退出
        if str=="exit":
            break
        udp_socket.sendto(str.encode("utf-8"), ("192.168.244.1", 8080))
    #关闭套接字
    udp_socket.close()
if __name__=="__main__":
    main()

udp接收端

import socket
def main():
    while True:
        #创建一个udp套接字
        udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
        #绑定一个本地信息
        localaddr=("",7788)# 必须邦定自己的电脑和iP,其他则不行
        udp_socket.bind(localaddr)
        #接受数据
        recv_data=udp_socket.recvfrom(1024)
        #recv_data这个变量中存储的是一个元组(接受到的数据,(发送方IP,port))
        recv_msg=recv_data[0]#  存储接受到的数据
        send_addr=recv_data[1]#  存储发送方的地址信息

        #打印数据
        #print(recv_data)
        # print("%s:%s",str(send_addr),recv_msg.decode("utf-8"))#  window中,只能用gbk加密
        print("%s:%s"%(str(send_addr), recv_msg.decode("gbk")))
    #关闭套接字
    udp_socket.close()
if __name__=="__main__":
    main()

udp聊天器

import socket
def send_mess(udp_socket):
    # 获取发送的内容
    dest_ip = input("请输入对方的ip:")
    dest_port = int(input("请输入对方的port"))
    send_data = input("请输入要发送的信息:")
    udp_socket.sendto(send_data.encode("gbk"),(dest_ip,dest_port))
def rec_mess(udp_socket):
    recv_data = udp_socket.recvfrom(1024)
    print("%s:%s" % (str(recv_data[1]), recv_data[0].decode("gbk")))
def main():
    #创建套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    #循环来进行处理事件
    while True:
        print("******udp_聊天器******")
        print("输入2,发送消息:")
        print("输入1,接受消息:")# bug不能先用1,只能发送以后,绑定固定的Ip的话,才能使用
        print("输入0,退出系统:")
        op=input("请输入数据:")
        # 发送
        if op=="2":
            send_mess(udp_socket)
        elif op=="1":
            # 接受数据
             rec_mess(udp_socket)
        elif op=="0":
            break
        else:
            print("请重新输入数据:")

if __name__=="__main__":
    main()

文件下载客户端

import socket


def main():
    #1.创建套接字
    tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #2.获取服务器ip,port
    dest_ip=input("请输入要下载服务器ip:")
    dest_port=int(input("请输入下载服务器的port:"))
    #3.链接服务器
    tcp_socket.connect((dest_ip,dest_port))
    #4.获取下载文件名
    download_file_name=input("请输入要下载的文件名字:")
    #5.将文件名字发送到服务器
    tcp_socket.send(download_file_name.encode("gbk"))
    #6.接受文件中数据
    recv_data=tcp_socket.recv(1024*1024)#1M
    if recv_data:
        #7.保存接收到的数据到一个文件中
        with open("[新]"+download_file_name,"wb") as f:
            f.write(recv_data)
    #8.关闭套接字
    tcp_socket.close()

if __name__=="__main__":
    main()

文件下载服务器

import socket


def send_file_2_client(new_client_socket,client_addr):
    #1.接受客户端 需要下载的文件名
    #接收客服端发送过来 要下载的文件名
    file_name= new_client_socket.recv(1024).decode("gbk")
    print("客户端(%s)需要下载文件是:%s"%(str(client_addr),file_name))
    file_content=None
    #2.打开这个文件,读取数据
    try:
        f=open(file_name,"rb")
        file_content=f.read()
        f.close()
    except Exception as ret:
        print("没有要下载的文件(%s)"%file_name)
    # 发送文件的数据给客户端
    if file_content:
        new_client_socket.send(file_name)
def main():
    #1.买个手机(创建套接字 socket)
    tcp__server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #2.插入手机卡(绑定本地信息)
    tcp__server_socket.bind(("",7890))
    #3.将手机设置为正常的响铃模式(让默认的套接字由主动变为被动 listen)
    tcp__server_socket.listen(128)#  最多监听128个
    #4.等待别人的电话到来(等待客服端的链接)
    while True:
        new_client_socket,client_addr=tcp__server_socket.accept()#  元组拆包
        send_file_2_client(new_client_socket, client_addr)
        #关闭套接字
        new_client_socket.close()
    tcp__server_socket.close()

if __name__=="__main__":
    main()
    print("tcp")
发布了16 篇原创文章 · 获赞 0 · 访问量 497

猜你喜欢

转载自blog.csdn.net/zhanlong11/article/details/105003479