By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
444,100 Members | 2,495 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 444,100 IT Pros & Developers. It's quick & easy.

read/write to java socket in python

P: n/a
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);}
}

Nov 27 '07 #1
Share this Question
Share on Google+
3 Replies


P: n/a
On Nov 27, 1:08 pm, madsornom...@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);}

}
I don't know, but it's amazing to compare the python client with the
java server.
Nov 27 '07 #2

P: n/a
On Nov 27, 4:29 pm, hdante <hda...@gmail.comwrote:
On Nov 27, 1:08 pm, madsornom...@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 *

[Snip - a little Python]
And this the server in Java:
import java.io.*;
import java.net.*;

[Snip - a lot of Java]
}

I don't know, but it's amazing to compare the python client with the
java server.

Yes, Python is really handy :)

/Mads
Nov 27 '07 #3

P: n/a
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
<d1**********************************@d61g2000hsa. googlegroups.com>,
ma**********@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);}
}
Nov 28 '07 #4

This discussion thread is closed

Replies have been disabled for this discussion.