web-dev-qa-db-ja.com

Python、データを送信する方法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()
5
Ingmar05

さて私は非常に良いチュートリアルに従う前にそれをやった、リンクを見つけることができませんが、ここにコードがあります

client.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()
16
AbdulMueed

python 3 docs からのより良いアプローチは:

サーバー

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

それが役に立てば幸い。アルトゥーロ

14
Arturo

無限/継続的なサーバー接続が必要な場合は、次のサーバーコードを使用できます。

サーバーコード

    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()
0
shashika11