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()
客户端

 

posted @ 2018-09-03 15:35  Montant  阅读(102)  评论(0)    收藏  举报