read/write to java socket in python

Dave Baum Dave.Baum at motorola.com
Tue Nov 27 23:59:07 CET 2007


Your server program is using readLine(), which will block until a 
newline is received.  The server code does not write a newline, so it is 
waiting at recv() for data from the server, and the server is still 
waiting for a newline.  If you change the client to do the following, it 
should work:

s.send("Hi Java Server\n");


Dave


In article 
<d1774433-ff51-476c-969d-dc6a16846195 at d61g2000hsa.googlegroups.com>,
 madsornomads at gmail.com wrote:

> Hi all,
> 
> I have a problem with reading from a Java server after I have written
> to it - it just hangs. It works fine if I just write to the server and
> not try to write. I have read the HOWTO on sockets - and it states
> that there is a problem (something about flushing), but not what the
> solutions is. Nor do google. Can somebody please help?
> 
> A few lines down you can see the example code that sums up the
> problem. Just change the name of the Python HOST-variable.
> 
> Thanks
> Mads
> 
> 
> This is the client in Python:
> #! /usr/bin/env python
> 
> import sys
> from socket import *
> 
> PORT = 3122
> HOST = 'app-5'
> SUCCESS = 'Success'
> FAILURE = 'Failure'
> 
> s = socket(AF_INET, SOCK_STREAM)
> s.connect((HOST, PORT))
> s.send("Hi Java Server");
> print "Have written, waiting to recieve.."
> print s.recv(1014)
> s.close()
> 
> And this the server in Java:
> import java.io.*;
> import java.net.*;
> 
> public class Server{
>         public static void main(String args[]){
> 
>                 int port = 3122;
>                 int backLog = 50;
> 
>                 ServerSocket ss = null;
>                 try{
> 
>                         InetAddress localhost =
> InetAddress.getLocalHost();
>                         ss = new ServerSocket(port, backLog,
> localhost);
>                         while(true){
>                                 final Socket client = ss.accept();
>                                 new Thread(){
>                                         public void run(){
>                                                 try{
> 
> 
>                                                 InputStream is =
> client.getInputStream();
>                                                 BufferedReader buf =
> new BufferedReader(new InputStreamReader(is));
>                                                 print(buf.readLine());
> 
>                                                 PrintWriter out = new
> PrintWriter(client.getOutputStream());
>                                                 out.write("Hi Python
> Client.");
>                                                 out.flush();
>                                                 client.close();
>                                                 }catch(Exception e)
> {print(e);}
>                                         }
>                                 }.start();
>                         }
>                 }catch(Exception e){print(e);}
>         }
> 
>         private static void print(Object o){System.out.println(o);}
> }



More information about the Python-list mailing list