Python教程12
1.udp发送数据:
import socket
def main():
# 创建一个udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 第一个参数是ipv4协议,第二个参数是udp
# 使用套接字发送数据,第一个参数是发送数据,第二个参数是一个元祖
# udp_socket.sendto(b"jnjhhjdik111jj5555", ("192.168.1.7", 8080)) # 使用b表示发送数据流是bit
while True:
# 从键盘获取数据
send_data = input("请输入要发送的数据:")
if send_data == "exit":
break
udp_socket.sendto(send_data.encode("utf-8"), ("192.168.1.7", 8080)) # 多采用.encode("utf-8")设置数据流的编码
# 关闭套接字
udp_socket.close()
if __name__ == "__main__":
main()
2.udp接收数据
import socket
def main():
# 1.创建套接字
udp_socket2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2.绑定本地信息,如果一个网络程序不绑定,则系统会随机分配
localaddr = ("", 7788) # ip地址和端口号,IP一般不用谢,表示本机的任何一个IP
udp_socket2.bind(localaddr)
while True:
# 3.接收数据,1024表示接收的最大字节数
recv_date = udp_socket2.recvfrom(1024)
# 4.打印接收的数据
print(recv_date)
# 接收到的元组数据(b'http://www.cmsoft.cn', ('192.168.1.7', 8080))前面是数据信息,后面发送方的IP和端口
recv_msg = recv_date[0] # 接收到的数据
send_addr= recv_date[1] # 发送方的信息,是个元组
print("发送方信息:%s 发送的数据:%s" % (str(send_addr), recv_msg.decode("gbk"))) # 发送的英文不用解,Windows默认发送的gbk解码,Ubuntu是utf-8
# 5.关闭套接字
udp_socket2.close()
if __name__ == '__main__':
main()
3.udp聊天工具
import socket
def send_msg(udp_socket):
"""发送信息"""
# 定义发送的需要的信息
dest_ip = input("请输入对方的IP:")
dest_port = int(input("请输入对方端口号:"))
send_data = input("请输入需要发送的信息: ")
udp_socket.sendto(send_data.encode("utf-8"), (dest_ip, dest_port))
def recv_msg(udp_socket):
"""接收数据"""
recv_data = udp_socket.recvfrom(1024)
print("发送方的IP%s ,发送的信息%s" % (str(recv_data[1]), recv_data[0].decode("gbk")))
def main():
# 创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定信息
loacladdr = ("", 7788)
udp_socket.bind(loacladdr)
# 循环处理发送接收数据
while True:
print("--------------XXX聊天工具-------------")
print("1 .发送信息")
print("2 .接收信息")
print("3 .退出系统")
op = input("请输入功能:")
# 发送数据
if op == "1":
send_msg(udp_socket)
# 接收数据
elif op == "2":
recv_msg(udp_socket)
elif op == "0":
break
else:
print("输入有误,请重新输入......")
# 关闭套接字
if __name__ == '__main__':
main()
4.tcp_client发送信息
import socket
def main():
# 1.创建套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.连接服务器
# tcp_socket.connect(("192.168.1.7", 7890))
server_ip = input("请输入服务器IP:")
server_port = int(input("请输入服务器的端口:"))
server_addr = (server_ip, server_port)
tcp_socket.connect(server_addr)
# 3.发送接收数据
send_data = input("请输入要发送的数据:")
tcp_socket.send(send_data.encode("gbk"))
# 4.关闭套接字
tcp_socket.close()
if __name__ == "__main__":
main()
5.tcp_server接收、发送数据
import socket
def main():
# 1.创建套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.绑定信息
tcp_server_socket.bind(("", 7890))
# 3.设置套接字为监听状态,默认都写128
tcp_server_socket.listen(128)
while True:
print("等待一个客户端来连接........")
# 4.客户端连接
new_client_socket, client_addr = tcp_server_socket.accept()
print("打印连接的客户端信息:%s" % str(client_addr))
# 循环接收、发送信息
while True:
# 5.接收/发送客户端信息
recv_data = new_client_socket.recv(1024)
print("打印接收到客户端的信息:%s" % recv_data.decode("gbk"))
# 注意客户端未发送数据,表示客户端close,(客户端是不能发送为空值得),有数据则需要服务器处理
if recv_data:
new_client_socket.send("服务器接收成功......ok ....".encode("gbk")) # Windows用gbk,Linux用utf-8
else:
break
# 6.关闭套接字
new_client_socket.close()
print("已经服务完毕......")
tcp_server_socket.close()
if __name__ == '__main__':
main()
6.文件下载client
import socket
def main():
# 1.创建套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.获取服务器的IP和端口
dest_ip = input("请输入服务器IP:")
dest_port = int(input("请输入端口:"))
# 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)
# 如果有读取到数据,则下载,没有读取到则服务器不发送数据,接收到为空
if recv_data:
# 7.保存数据到文件,新建文件多用with open
with open("[新]" + download_file_name, "wb") as f:
f.write(recv_data)
# 8.关闭套接字
tcp_socket.close()
if __name__ == '__main__':
main()
7.文件下载server
import socket
def send_file_2_client(new_client_socket, client_addr):
file_name = new_client_socket.recv(1024).decode("gbk")
print("客户端s%需要下载的文件:s%" % (str(client_addr), file_name))
print("开始发送数据给客户端.....")
file_content = None
# 打开文件
try:
f = open(file_name, "rb")
file_content = f.read()
f.close()
except Exception as ret:
print("没有下载的文件。。。。")
# 发送文件
if file_content:
new_client_socket.send(file_content)
def main():
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_socket.bind(("", 7890))
tcp_socket.listen(128)
while True:
new_client_socket, client_addr = tcp_socket.accept()
# 调用下载方法
send_file_2_client(new_client_socket, client_addr)
new_client_socket.close()
tcp_socket.close()
if __name__ == '__main__':
main()