簡體   English   中英

Python,如何通過 TCP 發送數據

[英]Python, How to Send data over TCP

我需要創建一個簡單的服務器來監聽 TCP 連接。 如果它收到on<EOF>off<EOF>的文本,那么它會發送(回顯) success 接收部分正在工作,但現在我需要它發送success

代碼:

# import threading
import SocketServer

class TCPHandler(SocketServer.BaseRequestHandler): 

   def handle(self):
      self.msg = self.request.recv(1024).strip()
      if self.msg == "on<EOF>":
         print "Turning On..."
         #ECHO "SUCCESS<EOF>"        <----- I need the server to echo back "success"
      if self.msg == "off<EOF>":
         print "Turning Off..."
         #ECHO "SUCCESS<EOF>"        <----- I need the server to echo back "success"


      if __name__ == "__main__": 
         host, port = '192.168.1.100', 1100

  # Create server, bind to local host and port 
  server = SocketServer.TCPServer((host,port),TCPHandler)

  print "server is starting on ", host, port

  # start server
  server.serve_forever()

好吧,我在遵循一個非常好的教程之前做了一天,找不到鏈接,但這是代碼

客戶端.py

import socket

host = socket.gethostname()
port = 12345                   # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.sendall(b'Hello, world')
data = s.recv(1024)
s.close()
print('Received', repr(data))

對於服務器

echo_server.py

import socket

host = ''        # Symbolic name meaning all available interfaces
port = 12345     # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))

print host , port
s.listen(1)
conn, addr = s.accept()
print('Connected by', addr)
while True:

    try:
        data = conn.recv(1024)

        if not data: break

        print "Client Says: "+data
        conn.sendall("Server Says:hi")

    except socket.error:
        print "Error Occured."
        break

conn.close()

來自 python 3 文檔的更好方法是:

服務器

import socketserver

class MyTCPHandler(socketserver.BaseRequestHandler):
    """
    The request handler class for our server.

    It is instantiated once per connection to the server, and must
    override the handle() method to implement communication to the
    client.
    """

    def handle(self):
        # self.request is the TCP socket connected to the client
        self.data = self.request.recv(1024).strip()
        print("{} wrote:".format(self.client_address[0]))
        print(self.data)
        # just send back the same data, but upper-cased
        self.request.sendall(self.data.upper())

if __name__ == "__main__":
    HOST, PORT = "localhost", 9999

    # Create the server, binding to localhost on port 9999
    server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)

    # Activate the server; this will keep running until you
    # interrupt the program with Ctrl-C
    server.serve_forever()

客戶

import socket
import sys

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

# 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((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))

希望能幫助到你。 阿圖羅

如果您需要無限/連續的服務器連接,您可以使用以下服務器代碼。

服務器代碼

    import socket  # Import socket module
    
    port = 50000  # Reserve a port for your service every new transfer wants a new port or you must wait.
    s = socket.socket()  # Create a socket object
    host = ""  # Get local machine name
    s.bind(('localhost', port))  # Bind to the port
    s.listen(5)  # Now wait for client connection.
    
    print('Server listening....')
    
    x = 0
    
    while True:
        conn, address = s.accept()  # Establish connection with client.
    
        while True:
            try:
                print('Got connection from', address)
                data = conn.recv(1024)
                print('Server received', data)
    
                st = 'Thank you for connecting'
                byt = st.encode()
                conn.send(byt)
    
                x += 1
    
            except Exception as e:
                print(e)
                break
    
    conn.close()

客戶代碼

    import socket  # Import socket module
    import os
    import re
    
   
    s = socket.socket()  # Create a socket object
    port = 50000  # Reserve a port for your service every new transfer wants a new port or you must wait.
    
    s.connect(('localhost', port))
    x = 0
    
    st = str(x)
    byt = st.encode()
    s.send(byt)
    
   # send message for hundred times
    while x<100:
        st = str(x)
        byt = st.encode()
        s.send(byt)
    
        print(x)
    
        while True:
            data = s.recv(1024)
            if data:
                print(data)
                x += 1
                break
    
            else:
                print('no data received')
    
    
    
    print('closing')
    s.close()
    
    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM