Sending string via socket (python)

后端 未结 3 489
予麋鹿
予麋鹿 2020-11-30 23:32

I have two scripts, Server.py and Client.py. I have two objectives in mind:

  1. To be able to send data again and again to server from client.
  2. To be ab
相关标签:
3条回答
  • 2020-12-01 00:08

    client.py

    import socket
    
    s = socket.socket()
    s.connect(('127.0.0.1',12345))
    while True:
        str = raw_input("S: ")
        s.send(str.encode());
        if(str == "Bye" or str == "bye"):
            break
        print "N:",s.recv(1024).decode()
    s.close()
    

    server.py

    import socket
    
    s = socket.socket()
    port = 12345
    s.bind(('', port))
    s.listen(5)
    c, addr = s.accept()
    print "Socket Up and running with a connection from",addr
    while True:
        rcvdData = c.recv(1024).decode()
        print "S:",rcvdData
        sendData = raw_input("N: ")
        c.send(sendData.encode())
        if(sendData == "Bye" or sendData == "bye"):
            break
    c.close()
    

    This should be the code for a small prototype for the chatting app you wanted. Run both of them in separate terminals but then just check for the ports.

    0 讨论(0)
  • 2020-12-01 00:15

    This piece of code is incorrect.

    while 1:
        (clientsocket, address) = serversocket.accept()
        print ("connection found!")
        data = clientsocket.recv(1024).decode()
        print (data)
        r='REceieve'
        clientsocket.send(r.encode())
    

    The call on accept() on the serversocket blocks until there's a client connection. When you first connect to the server from the client, it accepts the connection and receives data. However, when it enters the loop again, it is waiting for another connection and thus blocks as there are no other clients that are trying to connect.

    That's the reason the recv works correct only the first time. What you should do is find out how you can handle the communication with a client that has been accepted - maybe by creating a new Thread to handle communication with that client and continue accepting new clients in the loop, handling them in the same way.

    Tip: If you want to work on creating your own chat application, you should look at a networking engine like Twisted. It will help you understand the whole concept better too.

    0 讨论(0)
  • 2020-12-01 00:22
    import socket
    from threading import *
    
    serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    host = "192.168.1.3"
    port = 8000
    print (host)
    print (port)
    serversocket.bind((host, port))
    
    class client(Thread):
        def __init__(self, socket, address):
            Thread.__init__(self)
            self.sock = socket
            self.addr = address
            self.start()
    
        def run(self):
            while 1:
                print('Client sent:', self.sock.recv(1024).decode())
                self.sock.send(b'Oi you sent something to me')
    
    serversocket.listen(5)
    print ('server started and listening')
    while 1:
        clientsocket, address = serversocket.accept()
        client(clientsocket, address)
    

    This is a very VERY simple design for how you could solve it. First of all, you need to either accept the client (server side) before going into your while 1 loop because in every loop you accept a new client, or you do as i describe, you toss the client into a separate thread which you handle on his own from now on.

    0 讨论(0)
提交回复
热议问题