java套接字程序中的多线程

时间:2014-02-26 09:19:00

标签: java multithreading sockets

我想在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;
    }

}

2 个答案:

答案 0 :(得分:1)

多线程!=速度增加。

您应该阅读(Google)有关客户端/服务器套接字编程的更多信息,因为您甚至不接近正常运行的程序。 您需要在服务器上侦听ServerSocket并接受来自客户端的连接,对于每个连接,您需要打开Socket连接并通过IO流交换信息。

答案 1 :(得分:0)

除非有多个连接,否则你不会用多线程更快地完成这个过程,但是如果有的话,只需从多个线程中调用这些东西,包含多个套接字,流等等。没有什么本质上非线程安全的这里,因为您没有使用任何静态或实例变量。

NB摆脱available()测试。它不符合你的想法。见Javadoc。