【问题标题】:Multi threading in java socket programjava socket程序中的多线程
【发布时间】:2014-02-26 09:18:59
【问题描述】:

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

}

【问题讨论】:

  • 到目前为止,您还没有展示您使用线程尝试过的内容

标签: java multithreading sockets


【解决方案1】:

多线程!= 提高速度。

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

【讨论】:

    【解决方案2】:

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

    NB 摆脱 available() 测试。它不会像你想的那样做。请参阅 Javadoc。

    【讨论】:

      猜你喜欢
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2014-01-22
      • 2014-08-16
      • 2017-04-29
      • 2017-12-27
      相关资源
      最近更新 更多