【问题标题】:Android socket connection to Python server与 Python 服务器的 Android 套接字连接
【发布时间】:2018-08-24 15:20:24
【问题描述】:

全部 我创建了简单的 android 应用程序,它应该通过套接字连接到 Python 3.6 服务器并发送数据。它不起作用。我已经失去理智,检查什么不起作用。你可以帮帮我吗?

主要活动

public class Test extends AppCompatActivity  {
public Button but1;
int Ra;
public void init(){
    but1 = (Button)findViewById(R.id.button_id);
    but1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          Client Connection = new Client();
          Connection.execute();


        }
    });
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.INTERNET},Ra);
    init();
}}

第二个文件

public  class Client extends AsyncTask<Void ,Void , Void > {


@Override
protected Void doInBackground(Void... voids)
{
    final String adress = "192.168.1.3";
    final int Port = 70;
    Log.d("Connection","trying to create connection");
            try {
                Log.d("Connection", "Creating socket");
                Socket connect = new Socket(adress, Port);
                Log.d("Connection","Connected");
                DataOutputStream dout = new DataOutputStream(connect.getOutputStream());
                DataInputStream din = new DataInputStream(connect.getInputStream());
                dout.writeUTF("Hello");
                dout.flush();
                Log.d("Connection","Sent");
                dout.close();
                din.close();
                connect.close();
            }catch (IOException e){
            {
                e.printStackTrace();
                Log.d("connection",e.getMessage());
            }}
            return null;
}}

Python 服务器

    import socket

_Connection = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#Creating socket
#binding socket to port
_ADDRESS = ('localhost', 70)
print('Starting Server on {} port {}'.format(*_ADDRESS))

_Connection.bind(_ADDRESS)

_Connection.listen(1)

while True:
    conn, addr = _Connection.accept()
    print("Connection from ", addr)
    msg = _Connection.recv(1024)
    print(msg)

日志

08-24 17:31:43.950 32614-1203/com.example.marcin.tcpiptest D/连接:无法从 /::(端口 47696)连接到 /192.168.1.3(端口 70):连接失败: ETIMEDOUT(连接超时)

如果有人知道我做错了什么,他们会告诉我,我将不胜感激

【问题讨论】:

  • 不工作不是一个好的错误描述。有什么错误吗?例外?崩溃。告诉我们发生了什么,什么没有发生。
  • 您的应用在哪里运行?
  • 我愿意,但什么也没发生。服务器没有发现任何连接。
  • 我询问了客户。你看到了哪些日志?
  • @greenapps 我的应用程序第一次在 Android Studio 的 android 虚拟设备上运行,但我发现这可能是问题所在。然后我在我的手机上安装了连接到我的 WiFi 的应用程序,然后什么也没发生。

标签: android python sockets


【解决方案1】:
msg = _Connection.recv(1024)

将服务器更改为

msg = _Connection.recv(0)

是缓冲区问题,我也有。试试:

msg = _Connection.recv(10)

并将消息从 Android 发送到服务器“1234567890server”

服务器只显示“服务器”。

【讨论】:

  • Python server import socket _Connection = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #Creating socket _port=1234 _ADDRESS = "" //any from localhost print('Starting Server on {} port {}'.format(*_ADDRESS)) _Connection.bind(_ADDRESS,_port) _Connection.listen(1) while True: conn, addr = _Connection.accept() print("Connection from ", addr) msg​​ = _Connection.recv (10) 打印(味精)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-18
  • 2015-09-29
  • 1970-01-01
  • 2021-02-11
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
相关资源
最近更新 更多