0

I try to create a client/server application between my Raspberry Pi (server in Python) and a java Client over my local network.

I can't figure out how to send message from the Python server to the Java client. I always have the error : [Errno 32] Broken pipe.

I can't seen where I'm wrong.

Here the Server code :

class ServerLED():
'''
classdocs
'''
def __init__(self, port = 15555):
 '''
 Constructor
 '''
 self.socketPi = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 self.socketPi.bind(("", port))
 self.response = ""
def listening(self):
 self.socketPi.listen(5)
 self.client, self.address = self.socketPi.accept()
 print "{} connected".format( self.address )
def receivingMessage(self):
 self.response = self.client.recv(1024)
 if self.response != "":
 print self.response
def answer(self):
 messageTosend = "Echo \r\n"
 try:
 self.socketPi.send(messageTosend)
 except socket.error, e:
 print "error is ", e
 self.socketPi.close()

I use the function this way :

socketPi = Server.ServerLED()
print "listening..."
socketPi.listening()
print "sending message..."
socketPi.answer()
print "done"
socketPi.receivingMessage()

On the client side (in JAVA) :

Socket socket = new Socket("192.168.1.18", 15555);
System.out.println("SOCKET = " + socket);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
str = in.readLine(); // Reding "ECHO"
System.out.println(str); 
out.println("Hello"); // sending message

I'm always stuck in the first "send()" of the server. If I start by sending a message from the client to the server, the server reads it but fails to respond.

Server output :

Start python for LED
listening...
('192.168.1.13', 58774) connected
sending message...
error is [Errno 32] Broken pipe

Does someone know where I am wrong ? Thanks a lot.

Maxime.

asked Jul 8, 2015 at 15:42
1
  • I have written something similar to your python server recently and I used a python module called asynchat it was quite easy to implement. docs.python.org/2/library/asynchat.html Commented Jul 8, 2015 at 16:05

2 Answers 2

6

It is a strange setup generally, but in the server you should be sending on the connection socket (self.client), not on the listening socket (self.socketPi).

answered Jul 8, 2015 at 15:49
Sign up to request clarification or add additional context in comments.

Comments

0

One problem is that the Socket you create in java isn't bind, that is - the Socket object is just created, but not opened waiting for the raspberry pi incoming socket connection.

Add the row

socket.bind(new java.net.InetSocketAddress("192.168.1.18", 15555));

after the socket is created. The address in the Socket constructor is probably not nescessary.

answered Jul 8, 2015 at 15:51

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.