• socket


    一.socket

      socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

      socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)

      socket和file的区别:

        file模块是针对某个指定文件进行【打开】【读写】【关闭】

        socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】

    a.软件

      客户端:  CS架构,  client -> server

      浏览器:  BS架构,  browser -> server

    b.总结: 

      1.相互通信本质发送010101100

      2.交换机的作用

      3.通过ipconfig查看自己的内网ip

      4.公网ip      自费

    c.基于socket模块实现网络通信

      网络通信发送的是字节,而不是字符串

      send/ recv都是字节

    服务端:

      accept, 阻塞: 等待客户端来连接.

      recv, 阻塞: 等待客户端发来数据.

    客户端:

      connect, 阻塞: 一直在连接,直到连接成功才往下运行其他代码.

      recv, 阻塞:  等待服务端发来数据.

    import socket
    #创建服务端socket对象
    server = socket.socket()
    #绑定ip和短口
    server.bind(("192.168.13.166",8001))
    #后便可以等5个人
    server.listen(5)
    while True:
        print("服务端准备开始接受客户端的连接")
        #等待客户端来连接,如果没人来就一直的等待.
        #conn是客户端和服务端连接的对象,服务端以后要通过该对象进行首发数据.
        #addr是客户端的地址信息
        conn,addr = server.accept()
        print("已经有人连接上了,客户端信息:",conn,addr)
        #1024表示:服务端通过获取数据时,一次性最多拿1024字节.
        while True:
            data = conn.recv(1024)
            print("已经有人发来消息了",data)
            #服务端通过连接对象给客户端回复了一个消息.
            if data == b'exit':
                break
            response = data + b"sb"
            conn.send(response)
        #与客户端断开链接
        conn.close()
        #关闭服务端的服务
        server.close()
    服务端
    import socket
    client = socket.socket()
    #向服务端发起连接请求
    #阻塞,去连接,知道连接成功后才会继续向下走
    client.connect(("192.168.13.166",8001))
    while True:
        #连接上服务端后,向服务端发送消息
        # client.send(b'hello')
        name = input("请输入姓名:")
        client.send(name.encode("utf-8"))#字节
        if name =="exit":
            break
        #等待服务端的消息
        data = client.recv(1024)
        print(data.decode("utf-8"))
    #关闭自己
    client.close()
    客户端
  • 相关阅读:
    erl_0012 timer:tc 测试模块函数调用运行耗时
    erl_0011 erlang 定时器相关
    erl0010
    erl0009
    erl0008
    erl0007
    erl0006
    erl0005
    开开心心过生活、踏踏实实做技术
    Android-理解Intent
  • 原文地址:https://www.cnblogs.com/chenxi67/p/9578822.html
Copyright © 2020-2023  润新知