Code Bye

着急!问一下本人的socket只接受一次信息,后面的信息都不接受了

代码如下:
服务端:
package com.gitaku.remotoserver;
import java.awt.AWTException;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.awt.Robot;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class RemotoServer {
static int port = 9999;
private static ServerSocket serverSocket;
private static Socket client;
private static Robot robot;
private static PointerInfo point;
private static DataInputStream in;
static float readX;
static float readY;
public static void main(String[] args) throws IOException, ClassNotFoundException {
try {
serverSocket = new ServerSocket(port);
client = serverSocket.accept();
robot = new Robot();
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(true) {
in = new DataInputStream(client.getInputStream());
readX =  in.readFloat();
readY = in.readFloat();
Point point = MouseInfo.getPointerInfo().getLocation();
robot.mouseMove((int)(readX),(int)(readY));
System.out.println(“remotoServer x = ” + readX + ” Y = ” + readY);
}
}
}
客户端:
package com.gitaku.remotoclient;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private Button left;
private Button right;
int port = 9999;
String host = “192.168.120.109”;
public Socket clientSocket;
final String TAG = getClass().getName();
public DataOutputStream out = null;
public OutputStream o = null;
private TextView screed;
private float initX;
private float initY;
private float setX;
private float setY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
left = (Button) findViewById(R.id.leftClick);
right = (Button) findViewById(R.id.rightClick);
screed = (TextView) findViewById(R.id.screed);
left.setOnClickListener(new LeftListener());
screed.setOnTouchListener(new ScreedListener());
long threadId = Thread.currentThread().getId();
Log.d(TAG, “this is main ” + threadId);
}
class ScreedListener implements OnTouchListener {
@Override
public boolean onTouch(View arg0, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_MOVE) {
initX = event.getX();
initY = event.getY();
ConnectPhoneTask connectPhoneTask = new ConnectPhoneTask();
connectPhoneTask.execute(host);

return true;
}
}
class LeftListener implements OnClickListener {
@Override
public void onClick(View arg0) {
Log.d(TAG, “–LeftListener–“);
}
}
public class ConnectPhoneTask extends AsyncTask<String,Void,Boolean> {
private ObjectOutputStream dou;
@Override
protected Boolean doInBackground(String… params) {
boolean result = true;
try {
clientSocket = new Socket(host,port);
} catch (IOException e) {
result = false;
}
return result;
}
@Override
protected void onPostExecute(Boolean result)
{
try {
out = new DataOutputStream(clientSocket.getOutputStream());
out.writeFloat(initX);
out.writeFloat(initY);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String mouseInfo = “< x = ” + initX + “, Y = ” + initY + “>”;
Log.d(TAG, mouseInfo);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
解决方案

10

不懂;
似乎服务端你那个就接收了一次吧
while(true){
cocket = serverSocket.accept();
…..逻辑…..
}

10

记得serverSocket.accept()是一个阻塞函数的吧,要接收多条可以写个while循环试试while(true){serverSocket.accept()…….}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明着急!问一下本人的socket只接受一次信息,后面的信息都不接受了