Java套接字-实时传输
我从Android Blogger Spot获得了这段代码,非常感谢他让我几乎理解了java中的基本套接字连接。所以我在我的android设备上安装了这个客户端应用程序,服务器正在运行,但是我如何在客户端代码中创建一个循环,使它能够实时地从EditText发送数据呢?(每当它改变时)请问是否有人能为一个完全的新手清除它 -----这是客户端代码(安卓版权所有): -----这是服务器代码(Android er版权):Java套接字-实时传输,java,android,sockets,networking,loops,Java,Android,Sockets,Networking,Loops,我从Android Blogger Spot获得了这段代码,非常感谢他让我几乎理解了java中的基本套接字连接。所以我在我的android设备上安装了这个客户端应用程序,服务器正在运行,但是我如何在客户端代码中创建一个循环,使它能够实时地从EditText发送数据呢?(每当它改变时)请问是否有人能为一个完全的新手清除它 -----这是客户端代码(安卓版权所有): -----这是服务器代码(Android er版权): 有几件事你需要改变 首先,如果希望实时发送数据,则需要从使用ClickList
有几件事你需要改变 首先,如果希望实时发送数据,则需要从使用ClickListener上的按钮更改为使用TextWatcher(请参阅中的addTextChangedListener)
由于每次文本更改时都会触发此事件,因此您需要在事件外部打开套接字(您不希望每次键入某些文本时都有一个新的套接字),然后在侦听器中,您只想将新数据发送到套接字。您可以在EditText上设置一个文本更改的侦听器,然后从那里进行发送
edittext.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
// ... do your sending here
}
但是要注意,如果发送不是异步的,它可能会阻止用户输入文本。在GSM网络上,网络延迟可能相对较高,因此当用户新键入的字符不会立即出现在屏幕上时,用户可能会感到恼火。谢谢您的帮助!我在事件onSensorChanged外部打开新套接字-因为我想向pc发送传感器数据,并创建新的dataOutputStream,但当我在事件内部使用dataOutputStream.WriteUTF时,它只发送一次。。有什么问题吗?确保你没有关闭你的插座,并且确保你在每次写入后都会刷新插座。
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServer {
public static void main(String[] args){
ServerSocket serverSocket = null;
Socket socket = null;
DataInputStream dataInputStream = null;
DataOutputStream dataOutputStream = null;
try {
serverSocket = new ServerSocket(8888);
System.out.println("Listening :8888");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(true){
try {
socket = serverSocket.accept();
dataInputStream = new DataInputStream(socket.getInputStream());
dataOutputStream = new DataOutputStream(socket.getOutputStream());
System.out.println("ip: " + socket.getInetAddress());
System.out.println("message: " + dataInputStream.readUTF());
dataOutputStream.writeUTF("Hello!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if( socket!= null){
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if( dataInputStream!= null){
try {
dataInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if( dataOutputStream!= null){
try {
dataOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
edittext.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
// ... do your sending here
}