-1

友達!リモートPCの画面を自分のPCに取り込みたい!UDP で書き込もうとしましたが、TCP プロトコルで書き込もうとしていますが、いくつか問題があります。誰かが私に感謝する問題が何であるかを教えてくれたら...そして、ここに私のコードがあります:Server.java

public Server(int port){
    this.G_PORT = port;
}
void sendMessage() throws IOException, AWTException{
    servSocket = new ServerSocket(G_PORT);
    System.out.println("Waiting...");
    cSocket = servSocket.accept();
    System.out.println("Server has connected to " + cSocket.getRemoteSocketAddress() + " on " + cSocket.getPort() +" port");

        BufferedOutputStream buffOS = new BufferedOutputStream(cSocket.getOutputStream());
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        Rectangle r = new Rectangle(d);

        KeyStroke keyStr = KeyStroke.getKeyStroke("ESCAPE");

        FileInputStream fileIN = null;
        OutputStream out = null;

    //while(keyStr.getKeyCode() != 27){
        bot = new Robot();
        buffIMG = bot.createScreenCapture(r);
        ImageIO.write(buffIMG, "jpeg", new File("D:\\ScreenShots\\test.jpeg"));
        fileIN = new FileInputStream(new File("D:\\ScreenShots\\test.jpeg"));
        out = cSocket.getOutputStream();
        int read, readTotal = 0;
        byteToIMG = new byte[BUFF_SIZE];

        while((read =  fileIN.read())!= -1){
            out.write(byteToIMG,0,read);
            System.out.println("IMG sended");
        }
    //}
    out.close();
    fileIN.close();
    cSocket.close();        
} 

および Client.java

void recievMessage(long starTime) throws UnknownHostException, IOException{
    cSocket = new Socket(InetAddress.getByName(G_HOST), G_PORT);
    System.out.println("Connected");
    JFrame frame = new JFrame("My frame");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    JLabel label = new JLabel();
    ImageIcon icon;

    InputStream in = cSocket.getInputStream();
    byteToIMG = new byte[BYTE_SIZE];
    int read;
    int readTotal = 0;
        while((read = in.read(byteToIMG)) != -1){
            readTotal += read;
            InputStream imgIN = new ByteArrayInputStream(byteToIMG);
            buffIMG = ImageIO.read(imgIN);
            icon = new ImageIcon();
            icon.setImage(buffIMG);
            label.setIcon(icon);
            frame.getContentPane().add(label, BorderLayout.CENTER);
            frame.pack();
            System.out.println("IMG recieved");
        }
} 

この問題を解決するのを手伝ってください! 別の解決策がある場合は、提案してください!ありがとう!

4

1 に答える 1

2

ソケットでのすべての読み取りが 1 つのイメージ全体を提供すると想定しています。あなたはそれを仮定することはできません。わずか 1 バイトしか配信されない場合があります。

幸いなことに、それはそれよりもずっと簡単です:

buffImg = Imageio.read(in);

また、送信側も非常に簡単です。ファイルは必要ありません。電話するだけ

ImageIO.write(buffImg, "jpeg", out);
于 2013-02-15T01:14:37.960 に答える