gpt4 book ai didi

Java Socket 服务器客户端代码卡住

转载 作者:太空宇宙 更新时间:2023-11-04 13:52:56 26 4
gpt4 key购买 nike

我已经实现了下面的代码。服务器从客户端接收图像,然后 matlab 检测到一些对象并保存新图像face.jpg 然后我尝试将一些点发送回客户端代码卡在//////////我的客户端代码的一部分中:

 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Thread.sleep(15000);
Log.d("myTag","Test message11");


try {
points = inFromServer.readLine();
}catch(Exception IO){

Log.d("myTag","Fails to read from server");
}


Log.d("myTag",points);



sock.close();

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

整个 Android 客户端代码都在这里。大家有什么想法吗?请帮忙。

public class MyActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
}

int TAKE_PHOTO_CODE = 0;
public static int count=0;
public static String message="SENT";


public void button2OnClick(final View k){
//Connecting to server and send the picture
new Thread(new Runnable(){
public void run(){
try {



int i;
FileInputStream fis = new FileInputStream (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/1.jpg");

Socket sock = new Socket("192.168.1.91", 6789);

DataOutputStream os = new DataOutputStream(sock.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(sock.getInputStream()));

byte[] buffer = new byte[1024];
int bytesRead;

while ((i = fis.read()) > -1)
os.write(i);
fis.close();
os.close();

//lhyh apotelesmatos apo server
String points;

points="";

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Thread.sleep(15000);
Log.d("myTag","Test message11");


try {
points = inFromServer.readLine();
}catch(Exception IO){

Log.d("myTag","Fails to read from server");
}


Log.d("myTag",points);



sock.close();

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


File filePath2 = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/1.jpg");
filePath2.delete();

//File filePath2 = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder");
//filePath2.delete();






}catch (Exception IO){

message="NOT SENT";

File filePath = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/1.jpg");
filePath.delete();

File filePath2 = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder");
filePath2.delete();

Log.d("myTag",message);

}
}

}).start();
Button button=(Button) k;
((Button) k).setText(message);



}


public void buttonOnClick(View v){



//here,we are making a folder named picFolder to store pics taken by the camera using this application
final String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/";
File newdir = new File(dir);
newdir.mkdirs();

Button capture = (Button) findViewById(R.id.button);
capture.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {


// here,counter will be incremented each time,and the picture taken by camera will be stored as 1.jpg,2.jpg and likewise.
count++;
String file = dir+"1.jpg";
File newfile = new File(file);
try {
newfile.createNewFile();
} catch (IOException e) {}

Uri outputFileUri = Uri.fromFile(newfile);

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

startActivityForResult(cameraIntent, TAKE_PHOTO_CODE);





}
});
}

@TargetApi(11)
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) {
Log.d("CameraDemo", "Pic saved");


// Afou travhksei thn kainouria eikona provaletai sto imageview
Bitmap bmp = BitmapFactory.decodeFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/1.jpg");
ImageView image = (ImageView) findViewById(R.id.imageView2);
image.setImageBitmap(bmp);
//mage.setRotation(270);

}
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_my, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}

}

我也发送服务器代码 公共(public)类 ImageReceiver {

public static void main(String[] args) {

try{

ServerSocket socket = new ServerSocket(6789);

System.out.println("Server On-----Waiting for Image");
while(true)
{

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Receive Image From CLient //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
Socket clientSocket = socket.accept();

File filePath = new File("C:\\ImagesReceived\\image.jpg");
filePath.delete();

DataInputStream dis = new DataInputStream(clientSocket.getInputStream());
FileOutputStream fout = new FileOutputStream("C:\\ImagesReceived\\image.jpg");
try{


int i;
while ( (i = dis.read()) > -1) {

fout.write(i);
}
System.out.println("Image received");
}catch(Exception FromClient ){
System.out.println("Image wasn't received");

}
fout.flush();
fout.close();

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Open Matlab Connection in order to Make the Face Detection ////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

try{

MatlabProxyFactoryOptions options =
new MatlabProxyFactoryOptions.Builder()
.setUsePreviouslyControlledSession(true)
.build();
MatlabProxyFactory factory = new MatlabProxyFactory(options);
MatlabProxy proxy = factory.getProxy();


proxy.eval("addpath('C:\\Users\\Theojim')");
proxy.eval("run('firsttry.m')");
proxy.eval("rmpath('C:\\Users\\Theojim')");
System.out.println("Matlab Done");
// close connection
proxy.disconnect();




}
catch(Exception Matlab){
System.out.println("Matlab Error");
}



//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Epistrofh Shmeiwn Proswpou apo text file ////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

try{
String sCurrentLine;

BufferedReader br = null;
br = new BufferedReader(new FileReader("C:\\ImagesReceived\\facepoints.txt"));
String points="";
while ((sCurrentLine = br.readLine()) != null) {

points+=sCurrentLine;

}
System.out.println(points);



DataOutputStream outToClient = new DataOutputStream(clientSocket.getOutputStream());
outToClient.writeBytes(points);
System.out.println("points sent to android");
}catch(Exception Points){
System.out.println("Points Failed to be sent to client");
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Epistrofh Eikonas Face Detected ////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//try{
// int j;

// FileInputStream file = new FileInputStream("C:\\ImagesReceived\\face.jpg");
//DataOutputStream stream = new DataOutputStream(clientSocket.getOutputStream());

// while ((j = file.read()) > -1) {
// System.out.println("While starts"+j);
// stream.write(j);
//stream.flush();
//System.out.println("While endss");
//}
//System.out.println("While exits");
//file.close();
//stream.close();
dis.close();



//}
//catch(Exception ImageFace){
//System.out.println("Face.jpeg Failed to be sent to client");

//}












clientSocket.close();

}

}catch(Exception IO){
System.out.println("ERROR");
}

}

}

最后,我将发送 logat 文件的最后一部分,以查看到底发生了什么。请帮忙!!!!

    05-26 22:05:59.715  16000-16491/com.example.theojim.myapplication D/myTag﹕ Test message11

05-26 22:05:59.716 16000-16491/com.example.theojim.myapplication D/myTag:无法从服务器读取

最佳答案

服务器读取直到流结束。客户端需要关闭套接字才能传递流结束。

关于Java Socket 服务器客户端代码卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30121874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com