zoukankan      html  css  js  c++  java
  • python socket网络编程

    计算机通过网卡通信,一台计算机可以有多个网卡。

    通信线路可传递各种类型的数据,遵循不同的通信协议。

    socket:相当于通信双方的端口。

    机器上最多开放的端口数:65535.

    建立连接需要IP地址和端口号。

    每个机器有IP地址,有端口号,通信时找到IP地址,再找到具体的端口号,因为机器上可以同时运行很多程序,所以需要同时开放很多端口。

    发送端伪代码:

    import socket
    socket.TCP/IP
    connect(server.ip,server.port)
    socket.send('hello,world')
    
    socket.recv()       #发送端也可以接收服务器传来的数据
    socket.close()        #关闭端口
    

     服务器端伪代码:

    import socket
    socket.TCP/IP
    listen(0.0.0.0,1234)    #0.0.0.0是IP地址,一个服务器可以有多个IP地址,每个IP地址下有多个端口,接收数据时需要指定IP地址和端口
    #0.0.0.0是指所有IP地址,1234是端口号
    socket.waiting()       #等待数据传来
    socket.recv()     
    send()      #服务器也可以发送数据
    

    socket families(地址簇,网络层):

    socket.AF_UNIX  进程通过内存通信,不经过硬盘

    socket.AF_INET  IPV4,网络层

    socket.AF_INET6  IPV6

    socket types(传输层):

    socket.SOCK_STREAM  #for tcp协议

    socket.SOCK_DGRAM  #for udp协议

    socket.SOCK_RAW  #原始套接字,处理底层、原始的数据ICMPIGMP等网络报文;更改IP地址;

    真代码:

    服务器端:

    import socket
    server=socket.socket()
    server.bind(('localhost',9696))
    server.listen()
    print('开始等待')
    conn,addr=server.accept()    #返回两个值,第一个是客户端连过来而在服务器端为其生成的一个连接实例,第二个是地址
    
    print(conn,addr)
    print('电话来了')
    data=conn.recv(1024)
    print('receive:', data)
    conn.send(data.upper())
    
    server.close()
    

     客户端:

    import socket
    client=socket.socket()     #声明socket类型,同时生成socket连接对象
    client.connect(('localhost',9696))
    
    # client.send(b"hello,world.")   #只能以字节的格式发送,b代表byte,b只能转换ACS码,不能转换中文
    client.send("胖虎就是刚田武".encode('utf-8'))   #中文转换为bytes
    data=client.recv(1024) print('recv:',data.decode())  #把bytes转换为utf-8 client.close()

     多次传输信息:

    服务器端:

    import socket
    server=socket.socket()
    server.bind(('localhost',9696))
    server.listen()
    print('开始等待')
    conn,addr=server.accept()    #返回两个值,第一个是客户端连过来而在服务器端为其生成的一个连接实例,第二个是地址
    print('电话来了')
    while True:
        data=conn.recv(1024)
        print(type(data))   #data是bytes类型
        print(type(data.decode()))      #data.decode()是str类型
        print('receive:',data.decode()) #收到的是bytes,需要decode()解码成string
        conn.send(data.upper())
    server.close()
    

     客户端:

    import socket
    client=socket.socket()     #声明socket类型,同时生成socket连接对象
    client.connect(('localhost',9696))
    # client.send(b"hello,world.")        #只能以字节的格式发送,b代表byte,b只能转换ACS码,不能转换中文
    # client.send("胖虎就是刚田武".encode('utf-8'))  #中文转换为bytes
    while True:
        massage=input('输入要发送的内容:').strip()
        client.send(massage.encode('utf-8'))
        data=client.recv(1024)
        print('receive:',data.decode())
    client.close()
    
  • 相关阅读:
    C++中的extern "C"【转】
    无题
    MATLAB中文件的读写和数据的导入导出【转】
    逝去的2012
    C/C++语言中Static的作用详述
    C++:源文件与头文件有什么区别【转】
    Bash,后台与nohup
    关于include 和 extern
    python易错点
    android实现点击两次返回键实现退出功能
  • 原文地址:https://www.cnblogs.com/zhhy236400/p/9787173.html
Copyright © 2011-2022 走看看