【发布时间】:2021-03-27 21:23:46
【问题描述】:
我正在制作一个简单的 android 应用程序来将字符串发送到服务器(在 python 中创建)。我正在使用单独线程中的套接字连接到服务器,如代码所示。我想在按钮点击时发送字符串。 这是java代码:
public class MainActivity extends AppCompatActivity {
private Socket socket;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new ClientThread()).start();
btn = (Button) findViewById(R.id.button);
if (socket != null){
try {
OutputStream output = socket.getOutputStream();
PrintWriter writer = new PrintWriter(output, true);
writer.println("1");
} catch (IOException e) {
e.printStackTrace();
}
}
}
class ClientThread implements Runnable{
@Override
public void run() {
try {
socket = new Socket("192.168.0.12", 80);
} catch (IOException e) {
e.printStackTrace();
}
}
}
这是我的 python 服务器
import socket
host = socket.gethostbyname(socket.gethostname())
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, 80))
print("ip = ", host)
s.listen(1)
print("Listening")
while True:
conn, addr = s.accept()
print(addr, " connected to us")
conn.sendall(bytes("Hello", "utf-8"))
while True:
try:
data = bytes.decode(conn.recv(1024), "utf-8")
print(data)
except:
break
这是服务器输出
ip = 192.168.0.12
Listening
('192.168.0.6', 45903) connected to us
请给我发送数据到服务器的建议
【问题讨论】:
-
I am connecting to server using socket in separate thread很好。但是,当您写入套接字时,也可以在线程中执行它,因为现在您有一个NetworkOnMainThreadException。 -
不,我想在单击按钮时发送消息,所以我不能在线程中执行此操作。
-
你必须这样做。只需开始一个新线程。
-
非常感谢,对我帮助很大。
标签: java python android android-studio sockets