Can someone help answer this? http://stackoverflow.com/questions/14698020/java-nio-server-and-python-asyncore-client
Blocking python client works, asyncore doesn't work. Server.java: import java.net.InetAddress; import java.net.InetSocketAddress; import java.nio.channels.SelectionKey; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.nio.channels.SelectableChannel; import java.nio.channels.Selector; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Iterator; import java.util.Set; class Server { public Selector sel; public ServerSocketChannel ssc; public SocketChannel channel; public static void main(String[] args) throws Exception { Server s = new Server(); s.openSocket(12000); s.run(); } private void openSocket(int port) throws Exception { InetSocketAddress address = new InetSocketAddress("0.0.0.0", port); ssc = ServerSocketChannel.open(); ssc.configureBlocking(false); ssc.socket().bind(address); sel = Selector.open(); ssc.register(sel, SelectionKey.OP_ACCEPT); } public void run() throws Exception { while (true) { sel.select(); Set<SelectionKey> keys = sel.selectedKeys(); Iterator<SelectionKey> i = keys.iterator(); while (i.hasNext()) { SelectionKey key = (SelectionKey) i.next(); i.remove(); if (!key.isValid()) { continue; } if (key.isAcceptable()) { channel = ssc.accept(); channel.configureBlocking(false); System.out.println("Accepted...\n"); channel.register(sel, SelectionKey.OP_READ); } if (key.isReadable()) { if (channel == key.channel()) { System.out.println("Readable\n"); ByteBuffer buffer = ByteBuffer.wrap(new byte[1024]); int pos = channel.read(buffer); buffer.flip(); System.out.println(new String(buffer.array(), 0, pos)); } } } } } } Asyncore Python Code: import socket import select import asyncore class Connector(asyncore.dispatcher): def __init__(self, host, port): asyncore.dispatcher.__init__(self) self.buffer = "hi" self.create_socket() self.connect((host, port)) def handle_connect(self): print("[]---><---[]") # not called <------------------ def handle_read(self): pass def writable(self): len(self.buffer) > 0 def handle_write(self): sent = self.send(self.buffer) print("[]--->" + self.buffer[0:sent]) self.buffer = self.buffer[sent:] def handle_close(self): print("[]...x...[]") self.close() connector = Connector("localhost", 12000, Handler()) asyncore.loop() Python Blocking client: # Echo client program import socket import sys HOST = 'localhost' # The remote host PORT = 12000 # The same port as used by the server s = None for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res try: s = socket.socket(af, socktype, proto) print("socket") except OSError as msg: s = None continue try: s.connect(sa) print("connected") except OSError as msg: s.close() s = None continue break if s is None: print('could not open socket') sys.exit(1) print("Sending") s.sendall(bytes("Hey server", "UTF-8")) data = s.recv(1024) # s.close() print('Received', repr(data)) -- http://mail.python.org/mailman/listinfo/python-list