Android Prise d'Exception “à la socket est fermée”

Lorsque j'essaie d'exécuter un test composé d'un écho serveur et un client android avec le code suivant, j'ai toujours l'exception msg "socket est fermée". Ce code peut simplement envoyer des msg à un serveur et recevoir des msg à partir du serveur, mais si vous voulez faire les deux en même temps, il ne fonctionne tout simplement pas... je suis très curieux de savoir pourquoi il va conduire à ce genre de problème, et comment le corriger si je veux qu'il soit en mesure d'envoyer msg serveur echo

et de recevoir des msg de serveur echo?

            //Server IP address 
            InetAddress serverIp;

            //try to connect Server
            try {

                //set up server IP address
                serverIp = InetAddress.getByName("192.168.17.1");

                //set up port
                int serverPort=12345;

                //initiate socket connection
                Socket clientSocket=new Socket(serverIp,serverPort);

                BufferedOutputStream out = new BufferedOutputStream(clientSocket.getOutputStream());
                out.write("Send From Android1111, stitch ".getBytes());
                out.flush();

                //wait to receive Server's msg 
                BufferedReader  br =new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 

                total.toString();*/
            //Display received msg with Toast
                Toast.makeText(getApplicationContext(), br.readLine(), Toast.LENGTH_SHORT ).show();

            //close connection
                clientSocket.close();             

//             out.close();
//             out = null;
            } catch (IOException e) {
                //display exception with Toast
                Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_SHORT).show();
            }

malheureusement, cela ne fonctionne toujours pas ...j'ai suivi vos instruction et de modifier le code pour:

            //set up Server IP address 
            serverIp = InetAddress.getByName("192.168.2.2");

            //set up Server port
            int serverPort=12345;

            //initiate socket connection
            Socket clientSocket=new Socket(serverIp,serverPort);

                //open input and output stream
            OutputStream out = clientSocket.getOutputStream();
            InputStream in = clientSocket.getInputStream();

            //send msg
            out.write("Send From Android1111, bitch ".getBytes());


                //receive msg from server
            byte[] buffer = new byte[in.available()];
            in.read(buffer);
            String rMsg = new String(buffer);
            Toast.makeText(getApplicationContext(), rMsg, Toast.LENGTH_LONG ).show();

            //close input and output stream
            in.close();
            out.close();

             //關閉連線
       clientSocket.close(); 
        } catch (IOException e) {
            //出錯後顯示錯誤訊息Toast
            Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_SHORT).show();
        }

pour l'assistant de commodité, voici le python code écrit pour la partie serveur:

# Practice Echo Server Program written in Python
import socket

# host = '' means it binds to any available interface
host = ''
port = 12345

# socket() function returns a socket object whose methods implement the various socket system calls.
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# Bind the socket to address. 
s.bind((host,port))

# Listen for connections made to the socket. The backlog argument specifies 
# the maximum number of queued connections and should be at least 0; 
# the maximum value is system-dependent (usually 5), the minimum value is forced to 0.
s.listen(5)

# Accept a connection. The socket must be bound to an address and listening for 
# connections. The return value is a pair (conn, address) where conn is a new socket 
# object usable to send and receive data on the connection, and address is the address
# bound to the socket on the other end of the connection.
conn, addr = s.accept()
print 'Connected by', addr

# Receive data from the socket. The return value is a string representing the data received.
# The maximum amount of data to be received at once is specified by bufsize. See the Unix
# manual page recv(2) for the meaning of the optional argument flags; it defaults to zero.
# Note For best match with hardware and network realities, the value of bufsize should be 
# a relatively small power of 2, for example, 4096.

while 1:
    data = conn.recv(1024)
    if not data: break 
    print 'received data is : ', repr(data)
    conn.send(data)

conn.close()
Essayez de ne pas poster "offensive" de la langue dans vos messages ici. Je vous remercie. J'ai corrigé pour vous.

OriginalL'auteur shanwu | 2012-01-12