0

サーバーソケットを構築し、クライアントに行を送信すると、クライアントは行を印刷します

しかし、サーバーソケットから受信したデータを印刷すると、ファイルの最初の行のみが印刷され、他の行は失われます

「\n」の後にデータが残っている場合があるので、次の 2 行のコードを追加すると、「部分文字列が見つかりません」というエラーが表示されますが、クライアントがこの種のデータ「5000\n1000」を受け取ることがあります。そのため、クライアントは 1000 を保持する必要があります ...

remain = data[data.index("\n")+1:]
data = remain

これはクライアントに送信したいデータです

1000 2000 3000 4000 5000
1000 3000 5000 7000 9000
1111 2222 3333 4444 5555

サーバ

import socket

Input = open("./Data","r")
data = Input.read()
Input.close()

# Construct the server_socket
server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_sock.bind(('localhost',15000))
server_sock.listen(1)
(client_socket,address) = server_sock.accept()

# send data
for line in data:
    client_socket.send(line)

client_socket.send("EOF")
client_socket.close()
server_sock.close()

クライアント

import socket

client_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client_sock.connect(('localhost',15000))

data = ""
while True:
    part = client_sock.recv(100)
    data = data + part
    if "\n" in data or "EOF" in data:
        list = data[:data.index("\n")].split(" ")
        print(list)
        remain = data[data.index("\n")+1:]
        data = remain
        if "EOF" in data:
            break

client_sock.close()
result.close()
4

2 に答える 2

1

あなたが実際に欲しいのは次のとおりだと思います:

Input.readLines()
于 2013-09-10T16:55:35.350 に答える
1

インデントする必要があると思います

client_socket.send(line)
于 2013-09-10T16:35:03.240 に答える