socket发信息

例子
以下是使用TCP / IP协议的四个最小示例程序:一台服务器,该服务器回显它收到的所有数据(仅为一个客户端提供服务),以及一个使用它的客户端。注意,服务器必须执行序列socket(), bind(),listen(),accept()(可能重复accept(),以服务一个以上的客户端),而一个客户端只需要在序列socket(),connect()。另请注意,服务器不在sendall()/recv()侦听的套接字上,而是/返回的新套接字 accept()。

前两个示例仅支持IPv4。

# 服务端
import socket

HOST = ''                 # 符号名称含义所有可用接口
PORT = 50007              # 任意非特权端口
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen(1)
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data: break
            conn.sendall(data)
# 客户端
import socket

HOST = 'daring.cwi.nl'    # 远程主机 可改为服务器ip地址
PORT = 50007              # 与服务器使用的端口相同
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'Hello, world')
    data = s.recv(1024)
print('Received', repr(data))

接下来的两个示例与以上两个示例相同,但同时支持IPv4和IPv6。服务器端将监听第一个可用的地址族(它应该监听两个)。在大多数支持IPv6的系统上,IPv6优先,并且服务器可能不接受IPv4流量。客户端将尝试连接到由于名称解析而返回的所有地址,并将流量发送到成功连接的第一个地址。

# 服务端
import socket
import sys

HOST = None               # 符号名称含义所有可用接口
PORT = 50007              # 任意非特权端口
s = None
for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC,
                              socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
    af, socktype, proto, canonname, sa = res
    try:
        s = socket.socket(af, socktype, proto)
    except OSError as msg:
        s = None
        continue
    try:
        s.bind(sa)
        s.listen(1)
    except OSError as msg:
        s.close()
        s = None
        continue
    break
if s is None:
    print('could not open socket')
    sys.exit(1)
conn, addr = s.accept()
with conn:
    print('Connected by', addr)
    while True:
        data = conn.recv(1024)
        if not data: break
        conn.send(data)
# 客户端
import socket
import sys

HOST = 'daring.cwi.nl'    # 远程主机
PORT = 50007              # 与服务器使用的端口相同
s = None
for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM):
    af, socktype, proto, canonname, sa = res
    try:
        s = socket.socket(af, socktype, proto)
    except OSError as msg:
        s = None
        continue
    try:
        s.connect(sa)
    except OSError as msg:
        s.close()
        s = None
        continue
    break
if s is None:
    print('could not open socket')
    sys.exit(1)
with s:
    s.sendall(b'Hello, world')
    data = s.recv(1024)
print('Received', repr(data))

其他参考 官网python3.7.9文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值