我是android编程的初学者,我想在android studio中寻求你的帮助..我需要在局域网中创建一个基于客户端 - 服务器的聊天应用程序..我怎样才能构建这个app什么是最简单的方法..
答案 0 :(得分:1)
我不会告诉你如何对此进行编码,因为这是为了让你弄明白,但我会告诉你你需要做什么。
首先,您需要创建服务器。您可以通过在端口946上打开TCP套接字或任何其他已经绑定到/不是用户的套接字来使用Java。然后,您将需要创建一个数据包处理程序来处理客户端发送的消息包。
现在,对于客户端,您需要为客户端创建一个套接字并将该套接字连接到远程主机。现在,您将创建消息包并通过这个新创建的套接字将它们发送到远程主机,服务器将在您对其进行编码时处理这些数据包。
答案 1 :(得分:0)
以下是一个示例代码,可帮助您入门。
在服务器端
我相信你知道如何使用xml布局创建android UI。 在xml布局中,添加一个带有id的按钮listView。 onclicked按钮将启动服务器,并保持打开以接收来自客户端的消息。
在MainActivity上,在创建了两个,Button和ListView的实例之后,使用findViewById找到Ids。 将listView设置为您创建的适配器。
ArrayAdapter<String> myAdapter = new ArrayAdapter<>(MainActivity.this, R.layout.list_items, list);
listView.setAdapter(myAdapter);
单击按钮并调用以下方法。
public void startListening(){
myThread = new Thread(new Runnable() {
@Override
public void run() {
try{
ServerSocket server = new ServerSocket(6000);
while(st) {
Socket socket = server.accept();
Message clientMessage = Message.obtain();
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
String strMessage = (String) ois.readObject();
clientMessage.obj = strMessage;
myHandler.sendMessage(clientMessage);
ois.close();
}
server.close();
} catch (IOException e) {
Message msg = Message.obtain();
msg.obj = e.getMessage();
myHandler.sendMessage(msg);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
});
myThread.start();
}
启动服务器并使用while循环将其保持打开状态,以便从客户端接收数据。 现在添加此方法以更新UI线程。
Handler myHandler = new Handler(){
@Override
public void handleMessage(Message status){
String myMessage = status.obj.toString();
list.add(myMessage);
}
};
在客户端
在xml中添加EditText和发送按钮以将数据发送到服务器。
在mainActivity中,创建editText和Button的实例后,使用findViewById找到它们的ID。
editText =(EditText)findViewById(R.id.editText);
send = (Button)findViewById(R.id.send);
点击发送按钮即可执行此操作。
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myString = editText.getText().toString();
sendData();
}
});
Bellow是sendData()方法。
public void sendData(){
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
Socket socket = new Socket("127.0.0.1", 6000);
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(myString);
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
});
thread.start();
}
在同一个Android设备或模拟器上运行这两个项目。 我认为这应该让你开始。