基于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()

 

posted @ 2018-10-04 13:49  _小溢  阅读(991)  评论(0编辑  收藏  举报