网络编程学习笔记

IP

在一个局域网内,一个IP标记一台唯一的设备;

端口

在一台电脑中一个应用程序占用一个端口
端口号的取值:0-65535
端口分为知名端口动态端口
知名端口号:0-1024

socket简介

用于网络通信必备的工具,在今天的所有网络通信的应用都是使用socket实现的;

socket的一般语法:

socket(socket_family, socket_type, protocol=0)

参数说明:
socket_family: AF_UNIX(用于Internet进程间通信)
			   AF_INET(用于同一台机器进程间的通信)
socket_type: SOCK_STREAM(流式套接字,主要用于TCP协议)
			 SOCK_DGRAM(数据报套接字,主要用于UDP协议)
protocal: 通常省略,默认为0

创建一个TCP socket

import socket

# 创建tcp的套接字
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)

# 使用套接字的功能

# 关闭套接字
s.close()

创建一个UDP socket

import socket

# 创建tcp的套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 使用套接字的功能

# 关闭套接字
s.close()

一个发送数据的UDP端口

import socket

# 创建套接字对象
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 操作套接字
send_data = input("请输入:")
udp_socket.sendto(send_data.encode("utf-8"), ("192.168.70.60", 8080))

# 关闭套接字
udp_socket.close()

一个接收数据的UDP端口

import socket

# 创建套接字对象
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定本地的相关信息,如果一个网络程序不绑定,则系统会随机分配
local_addr = ("", 7788)  # IP地址和端口号,IP一般不写,表示本机的任何一个IP
udp_socket.bind(local_addr)

# 接收数据
receive_data = udp_socket.recvfrom(1024)  # 1024表示本次接收的最大字节数
                                          # 返回值recv_data的结构是:(接受到的bytes类型数据, (消息发送方的IP地址, 发送方的端口号))

# 显示接收到的数据
receive_msg = receive_data[0].decode("gbk")

print(receive_msg)

# 关闭套接字
udp_socket.close()

使用UDP协议在同一个套接字实现信息的收发

import socket

# 创建套接字对象
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定信息
local_addr = ("", 8888)  # IP地址和端口号,IP一般不写,表示本机的任何一个IP
udp_socket.bind(local_addr)

# 操作套接字
while True:
    # 发送消息
    dest_ip = input("请输入对方的IP:")
    dest_port = int(input("请输入对方端口:"))
    send_data = input("请输入要发送的信息:")
    udp_socket.sendto(send_data.encode("gbk"), (dest_ip, dest_port))

    # 接收信息
    receive_msg = udp_socket.recvfrom(1024)  # 1024表示本次接收的最大字节数
    print(receive_msg)
# 关闭套接字
udp_socket.close()

使用TCP协议发送信息(服务器)

import socket

# 创建socket
tcp_cilent_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 目的信息
server_ip = input("请输入服务器IP:")
server_port = int(input("请输入服务器端口:"))

# 链接服务器
tcp_cilent_socket.connect((server_ip, server_port))

# 提示用户输入数据
send_data = input("请输入要发送的数据:")

# 发送数据
tcp_cilent_socket.send(send_data.encode("gbk"))

# 接收对方发送过来的数据,最大接收1024个字节
recvData = tcp_cilent_socket.recv(1024)
print(recvData)

# 关闭套接字
tcp_cilent_socket.close()

文件下载器

客户端

import socket

# 创建socket
tcp_cilent_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 获取服务器ip,port
dest_ip = input("请输入下载服务器的ip:")
dest_ip_port = int(input("请输入下载服务器的port:"))

# 链接服务器
tcp_cilent_socket.connect((dest_ip, dest_ip_port))

# 获取下载文件名字
download_file_name = input("请输入要下载的文件名字:")

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

# 接收文件中的数据
recv_date = tcp_cilent_socket.recv(1024)

# 保存收到的数据到一个文件中
with open(download_file_name, "wb") as f:
    f.write(recv_date)

# 关闭套接字
tcp_cilent_socket.close()

你可能感兴趣的:(python高级)