网络通信/socket/udp/tcp--图片传输问题及通信操作

网络通信/socket/udp/tcp–图片传输问题及通信操作

1.udp简单聊天器代码
通信较为简单,不安全,作为发送端口可以不绑定IP


import socket
import time

port = 10010

def interface():
    print("******欢迎来到 udp 不完全聊天器******")
    print("发送数据请输入 1")
    print("接收数据请输入 2")
    print("退出请输入 0")

#接收函数
def recv_fun(udp_socket):
    recv_data = udp_socket.recvfrom(1024)

    #explain data 
    data = recv_data[0].decode("utf-8")
    addr = str(recv_data[1])
    print("%s:%s" % (addr,data))

def send_fun(udp_socket):
    port = int(input("请输入需要发送到的端口:"))
    send_data = input("请输入发送的数据:")

    udp_socket.sendto(send_data.encode("utf-8"),("127.0.0.1",port))


#receive data
def main():
    #1.creat socket
    udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

    #2.bind information
    # ''is myself information
    #local_addr = ('127.0.0.1',10010)
    port = int(input("请输入绑定的端口:"))

    local_addr = ('',port)
    udp_socket.bind(local_addr)

    while(True):
        interface()
        mode = input("请选择模式:")
        if(mode == '1'):
            send_fun(udp_socket)
        elif(mode == '2'):
            recv_fun(udp_socket)
        elif(mode == '0'):
            print("退出")
            break
        else:
            print("输入错误,请重新输入")        




    #5.close socket
    udp_socket.close()
    

if __name__ == '__main__':
        main()

2.TCP文件下载器:
通信安全可靠,作为服务器需要绑定,作为客户端可以不绑定。
在传输图片的时候,因为图片二进制的原因,所以,在打开图片文件的时候,是需要以二进制的模式打开的,而传输的时候可以不向平常一样用“”utf-8“”的方式传输。经过测量,其它文件也可以用二进制的方式去打开,传输。

serive服务器代码:

import socket
#在二进制文件传输中,如,图片这一类型的数据, python中的文件需要用不同类型的方式去打开这个文件
#否则会出现,传输拒绝等错误,用二进制的方式打开,可以直接传输,不需要用utf-8的方式


def send_fun(new_client_socket):
	
	#1.接受文件名
	recv_data = new_client_socket.recv(1024)

	filename = recv_data.decode("utf-8")
	print(filename)
	
	#2.打开指定
	fd = open(filename,'rb+')

	print("open ok")
	#file_size = 
	while(True):
		text = fd.readline()
		if not text:
			break

		new_client_socket.send(text)
		#new_client_socket.send(text.encode("utf-8"))
		
	fd.close()	



#TCP 严格区分服务器,客户端,而UDP不用
def main():
	#1.创建TCP 套接字, 
	tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

	#2.绑定ip
	tcp_id = ("127.0.0.1",8082)
	tcp_socket.bind(tcp_id)

	#3.监听客户端
	tcp_socket.listen(128)

	#4.等待客户端链接
	new_client_socket,client_addr = tcp_socket.accept()
	print(client_addr)


	#5.接收与发送文件需求
	send_fun(new_client_socket)

	#6.关闭服务器
	tcp_socket.close()
	new_client_socket.close()



if __name__ == '__main__':
	main()

tcb客户端代码:

import socket


#循环接受数据的函数
def recv_fun(tcp_socket,name):
	#1.先打开创建一个文件
	#fd = open(name,"w")
	fd = open(name,"wb+")


	#3.循环接收数据,并且保存到文件里面
	while(True):
		recv_data = tcp_socket.recv(1024)
		#fd.write(recv_data.decode("gb2312"))
		fd.write(recv_data)

		if not recv_data:
			break

	fd.close()


#TCP 严格区分服务器,客户端,而UDP不用
def main():
	#1.创建TCP 套接字, 
	tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


	#2.链接服务器
	tcp_socket.connect(("127.0.0.1", 8082))

	#3.获取下载文件的名字
	download_filename = input("请输入下载文件的名字: ")
	new_filename = input("请输入新文件的名字")

	#4.将文件名发送到服务器
	tcp_socket.send(download_filename.encode("utf-8"))


	#5.接收文件的数据
	#6.保存数据到另一个文件中
	recv_fun(tcp_socket,new_filename)

	#7.关闭套接字
	tcp_socket.close()



if __name__ == '__main__':
	main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农-老七

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值