当前位置: 首页 > 知识库问答 >
问题:

我得到java.net.SocketException:连接重置由对等:socket写错误,当执行类截图中的主函数时

商冠玉
2023-03-14

帮助解决方案或哪里出了问题是徒劳的

import java.io.*;
import java.util.*;
import java.awt.image.*;
import java.awt.*;
import java.awt.event.*;
public class screenshot
{
    public static void main(){
        Link l=new Link("localhost",1111);
        System.out.println(Link.getIpAddress());
        String s[]=its();
        for(int i=0;i<s.length;i++){
            l.send(s[i]);//l.send("hello22");
        }
        for(int i=0;i<s.length;i++){
            System.out.println(l.recieve());
        }

        //System.out.println(l.recieve());
    }

    public static String[] its(){
        String[] tbo=null;
        try{
            Robot r=new Robot();
            BufferedImage img=r.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
            System.out.println(img.getWidth()+" "+img.getHeight());
            tbo=new String[img.getWidth()];
            for(int i=0;i<tbo.length;i++){
                tbo[i]="";
            }
            for(int i=0;i<img.getWidth();i++){
                for(int j=0;j<img.getHeight();j++){
                    tbo[i]+=img.getRGB(i,j);//out+=img.getRGB(i,j);
                }
                System.out.println(i);
                //out+="b";
            }
            //for(int i=0;i<img.getWidth();i++){
            //    out+=tbo[i]+"\n";
            //}
        }catch(Exception e){}
        //Base bo=new Base("1234567890-\n");
        //Base bn=new Base("1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM");
        //BaseNumber bnum=new BaseNumber(out,bo);
        //out=bnum.valueAs(bn).toString();
        return tbo;
    }

    public static void main2(){
        System.out.println(its());
    }
}

在这种情况下创建要发送到localhost的链接对象的Link类

class Link
{
    final public String ip;final public int port;Listener l;
    //protected ArrayList<String> queue=new ArrayList<String>();
    public Link(String ip,int port)
    {
        this.ip=ip;
        this.port=port;
        this.l=new Listener(port);
        l.start();
    }

    public static String getIpAddress(){
        try{
            return InetAddress.getLocalHost().getHostAddress();
        }catch(Exception e){
            System.out.println("An error ocurrerd in getIp\n "+e);
            System.exit(0);
            return null;
        }
    }

    public void send(String st)
    {
        try{      
            Socket s=new Socket(ip,port);  
            DataOutputStream dout=new DataOutputStream(s.getOutputStream()); 
            dout.writeUTF(st);  
            dout.flush();  
            dout.close();  
            s.close();  
        }catch(Exception e){
            System.out.println("An error ocurrerd in send\n "+e);
            e.printStackTrace();
            System.exit(0);
        }
    }

    public String recieve(){
        while(l.queue.size()==0);
        String s=l.queue.get(0);
        l.queue.remove(0);
        return s;
    }
}
class Listener extends Thread{
    ArrayList<String> queue=new ArrayList<String>();int port;
    Listener(int port){
        this.port=port;
    }
    public void run(){
        try{  
            while(true){
                ServerSocket ss=new ServerSocket(port);  
                Socket s=ss.accept();
                DataInputStream dis=new DataInputStream(s.getInputStream());  
                String str=(String)dis.readUTF();  
                queue.add(str);
                ss.close();
            }
        }catch(Exception e){
            System.out.println("An error ocurrerd in recieve\n "+e);
            System.exit(0);

        }

    }
}

共有1个答案

东方夕
2023-03-14
while(true){
            ServerSocket ss=new ServerSocket(port);  
            Socket s=ss.accept();
            DataInputStream dis=new DataInputStream(s.getInputStream());  
            String str=(String)dis.readUTF();  
            queue.add(str);
            ss.close();
        }

理想情况下,您应该在while循环外创建并关闭一个套接字,然后在while循环内读取。

与Send类似,您不应该在每次必须发送时都创建套接字。如果必须这样做,那么服务器在while循环中也必须有accept()。

希望这能解决你的问题。

 类似资料:
  • 我还尝试提供私有IP和端口4444,运行脚本后,服务器代理立即关闭,并且收到错误java.net.socketException:Connection reset by Peer:socket write error。 > JMeter控制台日志 我做了telnet privateip:4444,并通过了test命令。服务器代理返回yep数据。此设置正在本地框上工作。不在AWS盒子上。 请让我知道

  • 我正在尝试使用套接字实现一个HTTP服务器。如果客户端(例如浏览器)请求目录,服务器将显示可用文件列表。当客户端请求文件时就会出现问题。我得到以下错误: stacktrace显示问题来自方法: 但我想不出有什么问题。你能帮帮我吗? 编辑 谢谢大家的回答。在我读了你的答案后,我明白了问题是插座出现错误的时候。这是我的错误代码: 我的新代码是这样的:

  • 当我处理REST服务时,这是我应该期待的吗?我的服务器在亚马逊EC2上。 读取错误:SSL=0x1211A88:系统调用期间发生I/O错误,连接由对等方重置 javax.net.ssl.sslexception:读取错误:SSL=0x1211A88:系统调用期间的I/O错误,连接由在org.apache.harmony.xnet.provider.jsse.nativecrypto.ssl_rea

  • 我正在使用Python,并在给定端口上侦听UDP数据包,一切似乎都很好地工作-但经过较长时间后,脚本崩溃,出现以下错误: 当重新启动脚本时,相同的崩溃会在较短的时间后再次发生。相反,重新启动服务器似乎可以再次完全解决问题。 关于插座方面的事情,我正在做: 我是否遗漏了一些显而易见的东西,或者只是有一个简单的方法来避免这种情况? 提前感谢您提供的任何信息! 本吉

  • 这是我的代码片段。我得到的是访客的IP地址,但不是位置信息。它给出:java.net.SocketException:连接重置在java.net.SocketInputStream.Read(未知源)在java.net.SocketInputStream.Read(未知源)

  • 问题内容: 我在尝试从套接字读取时遇到以下错误。我正在执行该操作,并且出现此错误。仔细阅读文档,这表明连接的客户端部分关闭了连接。在这种情况下,我是服务器。 我可以访问客户端日志文件,但它没有关闭连接,实际上它的日志文件表明我正在关闭连接。有人知道为什么会这样吗?还有什么要检查的?当有本地资源可能达到阈值时,会出现这种情况吗? 我确实注意到我有以下几行: 就在readInt()。这是有原因的(长话