基于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通信的主要内容,如果未能解决你的问题,请参考以下文章

基于tcp的socket通信

Python网络编程02/基于TCP协议的socket简单的通信

基于套接字通信(tcp)

tcp连接是基于socket通信的吗

C++基于TCP和UDP的socket通信

Java Socket实现基于TCP和UDP多线程通信