我这里有一个简单的服务器程序,我正在设计一些东西来处理收到的数据包。
以下是代码:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Listener implements Runnable {
ServerSocket listenerSocket;
Socket connection = null;
OutputStream out;
InputStream in;
String packet;
@Override
public void run()
{
try{
listenerSocket = new ServerSocket(7331); //General socket setup
System.out.println("Waiting for connection");
connection = listenerSocket.accept();
System.out.println("Connection received from " + connection.getInetAddress());
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
do{
try{
packet = (String)in.readLine(); // Get packet data
System.out.println("Data:" + packet);
Thread handler = new Thread(new Handler(packet)); // Handler class will take / parse packet data.
handler.start();
}
catch(Exception e){
e.printStackTrace();
}
}while(!packet.equals("shutdown"));
}
catch(IOException ioException){
ioException.printStackTrace();
}
finally{
try{
in.close();
out.close();
listenerSocket.close();
}
catch(IOException ioException){
ioException.printStackTrace();
}
}
}
}
我正在使用单独的Handler线程处理每个数据包,如您所见。我想做的是在处理程序完成其进程时向客户端发送“更新”。例如,处理程序完成复制文件,将数据发送回客户端以告知它,然后它开始复制另一个文件,并让客户端知道。显然,处理程序线程无法访问套接字。我可以提出任何建议或改进吗?
答案 0 :(得分:0)
两个选项:
Handler
;确保您同步对套接字的访问权。Handler
个实例将响应数据放入其中;创建另一个线程,负责将响应从队列中取出并将它们发送回套接字。