我正在开发一款Android应用程序,当按下应用程序中的按钮时,会向PC上的服务器列表发送一个按键。当快速按下按钮时,一切都工作良好,期望输出“口吃”的问题。如果在客户端快速按下,服务器将“口吃”,有时只是变得没有响应。我正在使用的鳕鱼非常简单。简单吗?
服务器端:
ServerSocket welcomeSocket = new ServerSocket(6789);
while(true)
{
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
keyin = inFromClient.readLine();
robby.translateAndForward(keyin);
}
}
catch (Exception ex)
.... 在客户端
public class ImageBoundListener implements OnTouchListener {
private ImageView view;
private static PadClient client;
On Touch事件处理程序
@Override
public boolean onTouch(View view, MotionEvent event) {
int action = event.getAction() & MotionEvent.ACTION_MASK;;
if (client==null)
{
client=new PadClient();
}
if (action==MotionEvent.ACTION_DOWN)
{
client.sender("A");
}
Integer actionCode = action & MotionEvent.ACTION_MASK;
Log.d(actionCode.toString()," Event occured on: "+view.getTag());
return true;
}
}
实际发送实施
try{
Socket clientSocket = new Socket("192.168.1.104", 6789);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
System.out.println("Writing bytes to the server..");
outToServer.writeBytes(send);
clientSocket.close();
}
不确定从这里开始......
答案 0 :(得分:1)
您的代码存在以下问题:
每按一次按钮,您的代码就会打开连接。如果快速按下 - 客户端和服务器之间将同时打开许多连接。 最好建立一个持久连接并通过它发送所有数据。
您还可以在客户端添加某种缓冲。我的意思是来自几个按钮按下的数据将合并为一个数据包并发送到服务器。
在处理客户端和服务器之间的通信问题时 - 网络I / O日志记录(发送的内容以及任何一方收到的内容)非常重要。
您的服务器端可能如下所示:
try {
ServerSocket welcomeSocket = new ServerSocket(6789);
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
while(true) {
keyin = inFromClient.readLine();
Log.d("SERVER"," received: '" + keyin + "'");
robby.translateAndForward(keyin);
}
}
catch (Exception ex) {}