从列表中发送和接收套接字

时间:2015-11-26 22:22:53

标签: python python-3.x

我在发送和接收数据时遇到问题。我有一个包含这种格式的字符串的全局列表,例如'127.0.0.1 4001 \ r \ n'

当我的管理客户端连接时,如何通过套接字发送和接收它们?

服务器(不是完整的代码,只是处理管理连接的线程)

def HandleAdmin(adminSocket,):
    global addressList

    (c,a) = adminSocket.accept()

    for i in addressList:
        print(i)

    ts = ssl.wrap_socket(c, certfile="5cc515_server.crt",
                             keyfile="5cc515_server.key",
                             server_side=True,
                             cert_reqs=ssl.CERT_REQUIRED,
                             ca_certs="5cc515-root-ca.cer")

    if ts.recv(80).decode() == 'Hello\r\n':
        ts.send('Admin-Greetings\r\n'.encode()) 

    if ts.recv(80).decode() == 'Who\r\n':

            ts.send(addr.encode())
    ts.close()
    return

管理客户端

import ssl
import socket

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

ts = ssl.wrap_socket(s, certfile="100298750.crt",
                        keyfile="100298750.key",
                        ca_certs="5cc515-root-ca.cer")

ts.connect(('127.0.0.1', 4001))

ts.send("Hello\r\n".encode())

addressList = []

if ts.recv(80).decode() == "Admin-Greetings\r\n":

    print("The players currently playing are:\n\n")
    ts.send("Who\r\n".encode())

1 个答案:

答案 0 :(得分:0)

据我所知,你只需发送你的字符串,这样你就可以将整个列表加入一个字符串并发送它。

msj = "".join(addressList)
ts.send(msj)

当然,如果您不知道邮件的长度,那么您需要将其添加到字符串msj = unichr(len(msj)) + msjmsj = struct.pack('H', len(msj)) + msj的前缀中。

此外,您可以使用pickle将数据压缩为字符串,然后发送其大小+ pickle,然后在另一端解码。