Java是否将开放套接字传递给类?
我这里有一个简单的服务器程序,我正在尝试设计一些东西来处理接收到的数据包 代码如下:Java是否将开放套接字传递给类?,java,networking,Java,Networking,我这里有一个简单的服务器程序,我正在尝试设计一些东西来处理接收到的数据包 代码如下: 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.ServerSo
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
实例将响应数据放入其中;创建另一个线程,负责将响应从队列中取出并发送回套接字确保同步对套接字的访问。
我将如何执行此操作。即使它开着,我还能通过吗?你也可以