qiaoliang0302

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

乌班图,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()

 

posted on 2019-07-17 00:42  qiaoliang0302  阅读(159)  评论(0编辑  收藏  举报