基于tcp的socket通信
Posted whylinux
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于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()
以上是关于基于tcp的socket通信的主要内容,如果未能解决你的问题,请参考以下文章