乌班图,linux,mac 都可以用ifconfig 查看网络地址
windows 用图形界面或者命令行 ipconfig命令查看网络地址
ens33 通讯 inet地址 IP地址
lo 本地
sudo ifconfig ens33 down 关掉网卡
sudo ifconfig ens33 up 开启网卡
ctrl+a 快速回到命令行行首
ipv4 ip表示第四种版本,有4组数组成,每组数用一个“.”隔开,每组数最小0,最大255,共256个。已用完。
ipv6 ip表示第六种版本,inet6。
IP地址的分类。例:192.168.33.xx
前三组标识网络号,后面一组标识主机号。
A类地址:第一组网络号,后三组主机号
B类地址:前两组网络号,后两组主机号
C类地址:前三组网络化,后一组主机号 192.168.1.1~254
D类地址:用来单播,多播,广播
端口:
区分那个程序,一个端口就是一个数字,0~65535。如楼里的门牌号。
端口号分为两大类,一种是知名端口,小于1024的端口,如:80端口分配给HTTP服务,21端口分配给FTP服务。
另一种动态端口,1024~65535,一般不固定分配某种服务,而是动态分配。当一个系统程序或应用程序需要网络通讯时,它向主机申请一个端口,主机从可用的端口号中分配一个供它使用。当这个程序关闭时,同时也就释放了所占用的端口号。
进程:一个程序没有运行叫程序,运行起来叫进程。
socket简介:
1、创建套接字。
2、使用套接字收/发数据
3、关闭套接字
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 创建ipv4的协议族,tcp协议的套接字
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 创建ipv4的协议族,udp协议的套接字
一个udp客户端的收发数据的例子:
import socket def main(): #创建一个udp套接字 udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) send_date = input("请输入要输入的数据:") #可以使用套接字收发数据 #udp_socket.sendto(b"hahahahaha",("192.168.1.5",8080)) udp_socket.sendto(send_date.encode("utf-8"),("192.168.249.55",8080)) #关闭套接字 udp_socket.close() print("-----run-----") if __name__=="__main__": main()
一个udp服务器端的收发数据的例子:
import socket #接收数据 def recv_date(udp_socket): recv_msg = udp_socket.recvfrom(1024) print("%s:%s"%(str(recv_msg[1]),recv_msg[0].decode("utf-8"))) #发送数据 def send_date(dest_ip,dest_port,udp_socket): send_msg = input("请输入发送给对方的消息") #udp_socket.sendto(send_date.encode("utf-8"),("192.168.249.55",8080)) udp_socket.sendto(send_msg.encode("utf-8"),(dest_ip,int(dest_port))) def main(): #创建一个udp套接字 udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #绑定信息 udp_socket.bind(("192.168.249.210",7788)) dest_ip = "192.168.249.55" #input("请输入对方的ip:") dest_port = "8080" #input("请输入对方的port:") #循环处理发送接收 while True: #发送 send_date(dest_ip,dest_port,udp_socket) #接收 recv_date(udp_socket) #send_date = input("请输入要输入的数据:") #可以使用套接字收发数据 #udp_socket.sendto(b"hahahahaha",("192.168.1.5",8080)) #udp_socket.sendto(send_date.encode("utf-8"),("192.168.1.5",8080)) #关闭套接字 udp_socket.close() print("-----run-----") if __name__=="__main__": main()
一个tcp客户端程序例子:
# tcp客户端程序代码 from socket import * # 创建套接字 tcpClientSocket = socket(AF_INET,SOCK_STREAM) # 设置发送 serverAddr = ("192.168.1.5",8080) tcpClientSocket.connect(serverAddr) while True: # 发送数据 send_date = input("请输入要发送的数据:") if send_date == 'exit': break; tcpClientSocket.send(send_date.encode("utf-8")) # 接收数据 recvDate = tcpClientSocket.recv(1024) print(recvDate.decode("utf-8")) # 关闭套接字 tcpClientSocket.close()
一个tcp服务器端程序例子:
#tcp服务器端程序 from socket import * # 创建套接字 serverSocket = socket(AF_INET,SOCK_STREAM) # 绑定地址信息 serverSocket.bind(("",7788)) serverSocket.listen(10) # 循环接收客户端请求,创建连接并进行数据收发,关闭当前连接的套接字 while True: newSocket,clientAddr = serverSocket.accept() exit_flag = False while True: recvDate = newSocket.recv(1024) print("收到的数据:"+recvDate.decode("utf-8")) if recvDate.decode("utf-8") == "exit": break sendDate = input("请输入您要发到客户端的数据:") if sendDate =="exit": break if sendDate =="exitall": exit_flag = True break newSocket.send(sendDate.encode("utf-8")) newSocket.close() if exit_flag == True: break # 关闭监听套接字 serverSocket.close()
tcp链接下载文件的程序:
客户端:
#文件下载客户 from socket import * #创建套接字 cilentSocket = socket(AF_INET,SOCK_STREAM) #输入服务器端的ip地址和端口号 serverIp = input("请输入服务器端的ip地址:") serverPort = input("请输入服务器端的端口号:") #链接服务器 cilentSocket.connect((serverIp,int(serverPort))) #输入要下载的文件名 fileName = input("请输入要下载的文件名:") #将文件名发送到服务器 cilentSocket.send(fileName.encode("utf-8")) #接收文件中的数据 recDate = cilentSocket.recv(1024) #保存文件中的数据到一个文件 with open("新 "+fileName,"wb") as f: f.write(recDate) #关闭套接字 cilentSocket.close()
服务器端:
#文件下载服务器端 from socket import * serverSocket = socket(AF_INET,SOCK_STREAM) #绑定地址信息 serverSocket.bind(("192.168.249.210",8000)) #设置监听 serverSocket.listen(20) #接受来自客户端的链接并返回新连接。 newSocket,cilentAddr = serverSocket.accept() #接收客户端发来的待下载的文件名 fileName= newSocket.recv(1024).decode("utf-8") #打开文件 try: f = open(fileName,"rb") date = f.read() f.close() except Exception as ret: print("发送失败") if date: newSocket.send(date) #关闭新的套接字 newSocket.close() #关闭服务套接字 serverSocket.close()