套接字正在关闭?(安卓和Python)

我尝试在我的 Android 应用程序中使用 Sockets,但遇到了一个小问题。


我使用 python 创建服务器,一切正常。服务器收到来自Android客户端的消息,但似乎无法在客户端上获得响应。


这是我的服务器端:


import socket


HOST = '10.10.0.153'

PORT = 7800


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

print('socket created')


try:

    s.bind((HOST, PORT))

except socket.error as err:

    print('binding faild')

s.listen(10)



while 1:

    conn, addr = s.accept()

    print('Connect with ' + addr[0] + ':' + str(addr[1]))

    buf = conn.recv(1024)

    print(buf)

    data = "hello"

    conn.send(data.encode('utf-8'))

s.close()

这是客户端:


public class Sender extends AsyncTask<String, Void, Void> {


    private final String TAG = "Sender";


    Socket s;

    PrintWriter pw;


    @Override

    protected Void doInBackground(String... strings) {


    String message = strings[0];


    try {

        s = new Socket(GlobalVars.SERVER, GlobalVars.PORT);

        pw = new PrintWriter(s.getOutputStream());


        pw.write(message);

        pw.flush();


        BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));

        String msg = in.readLine();

        System.out.println(msg);


        pw.close();

        s.close();

    } catch(IOException e) {

        e.printStackTrace();

    }

}



慕运维8079593
浏览 151回答 3
3回答

慕雪6442864

在 Java 方面,您要求阅读“行”。一行必须以换行符 (&nbsp;docs&nbsp;) 结束。如果没有换行符,您的 Java 代码将只是坐在那里,阻塞在 内readLine(),等待换行符到达。将您的python代码更改为:data = "hello\n"

婷婷同学_

尝试pw.close();从您的代码中删除。也尝试删除这个:&nbsp; if(!s.isClosed()) {&nbsp; &nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.close();&nbsp; &nbsp; &nbsp; &nbsp; } catch (IOException e) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.printStackTrace();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Log.e(TAG, "IOException 2");&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python