我想在Java套接字程序中实现多线程。到目前为止,我已尝试过单个连接并且它可以工作,但由于是单个连接,因此进程很慢。我应该如何进行以便使用多线程更快地完成这个过程?
import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
public class MRPosting {
public static String MRPost(String strRequestMessage, String strIP,
int intPort) throws Exception {
String strResponseMessage = "";
try{
Socket socket = null;
socket = new Socket(strIP, intPort);
BufferedInputStream bin = new BufferedInputStream(
socket.getInputStream());
PrintWriter pw1 = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
pw1.println(strRequestMessage);
pw1.flush();
strResponseMessage = readInputStream(bin);
socket.close();
socket = null;
}catch(Exception e){
strResponseMessage = "ERROR:MRPORT_JAVA:"+e.toString();
return strResponseMessage;
}
return strResponseMessage;
}
public static String readInputStream(BufferedInputStream in)
throws Exception {
String read_msg = "";
int i = in.read();
if (i == -1) {
return "-1";
}
read_msg = read_msg + (char) i;
int available = in.available();
if (available > 0) {
byte[] Data = new byte[available];
in.read(Data);
read_msg = read_msg + new String(Data);
}
return read_msg;
}
}
答案 0 :(得分:1)
多线程!=速度增加。
您应该阅读(Google)有关客户端/服务器套接字编程的更多信息,因为您甚至不接近正常运行的程序。 您需要在服务器上侦听ServerSocket并接受来自客户端的连接,对于每个连接,您需要打开Socket连接并通过IO流交换信息。
答案 1 :(得分:0)
除非有多个连接,否则你不会用多线程更快地完成这个过程,但是如果有的话,只需从多个线程中调用这些东西,包含多个套接字,流等等。没有什么本质上非线程安全的这里,因为您没有使用任何静态或实例变量。
NB摆脱available()测试。它不符合你的想法。见Javadoc。