Python TCP服务器发送不带promt的数据

问题描述 投票:-1回答:1

我在使用python开发应用程序时遇到问题。

我需要在没有提示的情况下将数据从服务器发送到客户端,但是我在互联网上找到的所有示例都是回显服务器。

服务器应具有静态IP(127.0.0.1),并在第一次连接时保存客户端IP。我需要每5秒钟(直到超时)将数据从服务器发送到客户端,而无需等待服务器要求该数据。当然,客户端会在自己的例程中发送另一个数据。

服务器脚本:

import socket

TCP_IP = "127.0.0.1"
TCP_PORT = 5010
BUFFER_SIZE = 512
MESSAGE = 'Hi'

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
while(1):
    s.listen()

    conn, addr = s.accept()
    print ('Connection address:', addr)
    while 1:
        data = conn.recv(BUFFER_SIZE)
        if not data: 
            break
        print ("received data: ", data.decode())
        print ("address: ", addr[0])
        conn.send(MESSAGE.encode())  # echo
    print("Closing connection")
    conn.close()

和客户端脚本:

import socket
import sys
import logging
import time

HOST, PORT = "127.0.0.1", 5010
data = " ".join(sys.argv[1:])

for x in range(100):
    # Create a socket (SOCK_STREAM means a TCP socket)
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
        # Connect to server and send data
        sock.connect_ex((HOST, PORT))
        sock.sendall(bytes(data + "\n", "utf-8"))

        # Receive data from the server and shut down
        received = str(sock.recv(1024), "utf-8")
sock.close()
logging.info("Socket closed")

print("Sent:     {}".format(data))
print("Received: {}".format(received))
print("Size: ", sys.getsizeof(received), "bytes")

time.sleep(5)

我将非常感谢您的帮助。

python tcp server client communication
1个回答
0
投票

服务器保持连接并每5秒发送一次数据的示例。同时,服务器保持连接并循环接收数据。但是它阻止了服务器和客户端,并且循环应该在单独的线程中工作

服务器:

import socket
import time
import datetime


TCP_IP = "127.0.0.1"
TCP_PORT = 5010
BUFFER_SIZE = 512
MESSAGE = 'Hi'

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))

while True:
    s.listen()

    conn, addr = s.accept()
    print ('Connection address:', addr)
    while True:
        data = conn.recv(BUFFER_SIZE)
        if not data: 
            break
        print ("received data: ", data.decode())
        print ("address: ", addr[0])
        conn.send(MESSAGE.encode())  # echo

        # send data every 5 seconds - it should run in separated thread   
        while True:
            time.sleep(5)
            conn.send(str(datetime.datetime.now()).encode())

    print("Closing connection")
    conn.close()

客户

import socket
import sys
import logging
import time

HOST, PORT = "127.0.0.1", 5010
data = " ".join(sys.argv[1:])

for x in range(100):
    # Create a socket (SOCK_STREAM means a TCP socket)
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
        # Connect to server and send data
        sock.connect_ex((HOST, PORT))
        sock.sendall(bytes(data + "\n", "utf-8"))

        # Receive data from the server and shut down
        received = str(sock.recv(1024), "utf-8")

        print("Sent:     {}".format(data))
        print("Received: {}".format(received))
        print("Size: ", sys.getsizeof(received), "bytes")

        # receive data periodically - it should run in thread
        while True:
            received = str(sock.recv(1024), "utf-8")
            print("Received: {}".format(received))


sock.close()
logging.info("Socket closed")
© www.soinside.com 2019 - 2024. All rights reserved.