基于tcp的socket通讯

# socket
    # socekt是应用层与TCP/IP协议族通讯的中间软件抽象层,它是一组接口。在设计模式中,socket其实就是一个门面模式,它
    # 把复杂的tcp/ip协议族隐藏在socket接口后面,对用户来讲,一组简单的接口就是所有,让socket去组织数据,以符合指定的协议

# socket
    # 基于文件类型的套接字家族(通常不用)
        # 套接字家族的名字:AF_UNIX
        # unix一切皆文件、基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一个机器上,能够经过访问同一个文件系统间接完成通讯

    # 基于网络类型的套接字家族
        # 套接字家族的名字:AF_INET(表明IPV4),经常使用
        # 还有AF_INET6被用于IPV6

 

  server.py设计模式

import socket

sk = socket.socket()     # 建立一个socket
#sk.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) # 避免服务重启的时候报address already in use。加上这个解决
sk.bind(('127.0.0.1', 8080))    # 绑定,接收的参数是一个元组
sk.listen()      # 监听

conn, addr = sk.accept()     # 阻塞等待别客户端连接,客户端连接上来后获得其连接符与目标ip地址

# print(conn, addr)

ret = conn.recv(1024) # 接收客户端数据

print(ret.decode('utf-8'))  # 解码显示

str = '你好'
# conn.send(str.encode('utf-8')) # 给客户端发送数据,在网路上只能传输bytes类型,也就是二进制
# conn.send(b'hello client')
conn.send(bytes('你好', encoding='utf-8'))

conn.close()    # 关闭与客户端的连接
sk.close()  # 关闭socekt

  client.py网络

import socket

sk = socket.socket()    # 建立socket

sk.connect(('127.0.0.1', 8080))    # 客户端发起连接

str = '你好服务端'

#sk.send(str.encode('utf-8'))    # 编码发送
#sk.send(bytes('你好服务端', encoding='utf-8'))
sk.send(bytes('你好服务端'.encode('utf-8')))

ret = sk.recv(1024)
print(ret.decode('utf-8'))  # 解码

sk.close()