首页 \ 问答 \ Java TCP Socket发送字节数组(Java TCP Socket send byte array)

Java TCP Socket发送字节数组(Java TCP Socket send byte array)

我正在尝试使用Java TCP套接字构建文件服务器。 当我尝试发送文件超过几KB时,我不断收到错误消息。 错误如下:

Exception in thread "main" java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at fileServer.TCPServer.main(TCPServer.java:193)

我正在创建这样的输出流:

OutputStream output = clientSocket.getOutputStream()

错误来自这一行: output.write(sendData, 0, sendData.length)

其中,sendData是一个字节数组,我手工制作一个与协议一致的“协议”,该协议是28个字节的字节以及文件。 它错误出来的文件大约是780kB,其中一个2kB文件完美。 有任何想法吗?

编辑:一些添加我如何制作套接字的上下文。

            Socket clientSocket = listenSocket.accept();
        System.out.println("server is listening...");

        DataInputStream input = new DataInputStream(clientSocket.getInputStream());
        OutputStream output = clientSocket.getOutputStream();



        //receive the request packet
        //int nb = input.readInt();
        System.out.println("Read Length " + "28");
        byte[] sentence = new byte[28];
        for(int i=0; i<28; i++){
            sentence[i] = input.readByte();
        }

这就是我发送数据的方式:sendData是我构建发送的字节数组tArray是我正应对sendData发送的文件的字节数组

for(int i = 0; i<filSize; i++){
   //loads into the packet being built
   //needed to minus 36 since all the header info
   endData[i+36] = tArray[i];
}
System.out.println("send packet size: " + sendData.length);

System.out.print(sendData);
System.out.println("File size is: " + filSize);
int sendDataLength = sendData.length;
try{
    output.write(sendData, 0, sendDataLength);
}catch (IOException e){
    System.out.println("Error: " + e.getMessage());
}
clientSocket.close();

编辑2:我用了一个try catch,现在得到这个错误:软件导致连接中止:套接字写入错误


I'm trying to build a file server using Java TCP sockets. I keep getting an error when I try to send a file over a few KB. The error is as follows:

Exception in thread "main" java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at fileServer.TCPServer.main(TCPServer.java:193)

I am creating the output stream like this:

OutputStream output = clientSocket.getOutputStream()

And the error originates from this line: output.write(sendData, 0, sendData.length)

Where sendData is a byte array I hand make to an agreed upon 'protocol' that is 28 header bytes along with the file. The file it is erroring out on is about 780kB where a 2kB file works perfect. Any ideas?

EDIT: some added context of how I'm making the socket.

            Socket clientSocket = listenSocket.accept();
        System.out.println("server is listening...");

        DataInputStream input = new DataInputStream(clientSocket.getInputStream());
        OutputStream output = clientSocket.getOutputStream();



        //receive the request packet
        //int nb = input.readInt();
        System.out.println("Read Length " + "28");
        byte[] sentence = new byte[28];
        for(int i=0; i<28; i++){
            sentence[i] = input.readByte();
        }

And this is how I'm sending the data: sendData is the bytearray I built to send tArray is the array of bytes of the file that I'm coping into sendData to send

for(int i = 0; i<filSize; i++){
   //loads into the packet being built
   //needed to minus 36 since all the header info
   endData[i+36] = tArray[i];
}
System.out.println("send packet size: " + sendData.length);

System.out.print(sendData);
System.out.println("File size is: " + filSize);
int sendDataLength = sendData.length;
try{
    output.write(sendData, 0, sendDataLength);
}catch (IOException e){
    System.out.println("Error: " + e.getMessage());
}
clientSocket.close();

EDIT 2: I used a try catch and got this error now: Software caused connection abort: socket write error


原文:https://stackoverflow.com/questions/5944948
更新时间:2022-08-20 08:08

最满意答案

你可以这样做: -

$final_array = array();

foreach($Array1 as $key=>$val){
     if(is_array($val) && is_array($Array2[$key])){
         if(array_keys($val)[0] == array_keys($Array2[$key])[0]){
            $final_array[$key][array_keys($val)[0]] = $Array1[$key][array_keys($Array1[$key])[0]]+$Array2[$key][array_keys($Array2[$key])[0]];
         }
     }

}

print_r($final_array);

输出: - https://eval.in/834913

一个更好的方法: -

$final_array = array();

if(count($Array1) >= count($Array2)){

    foreach($Array1 as $key=>$val){
         if(is_array($val) && is_array($Array2[$key])){
                $final_array[$key][array_keys($val)[0]] = $Array1[$key][array_keys($Array1[$key])[0]]+$Array2[$key][array_keys($Array2[$key])[0]];
         }else{
            $final_array[$key] = $val;
         }
    }
}
if(count($Array1) < count($Array2)){

    foreach($Array2 as $key=>$val){
         if(is_array($val) && is_array($Array1[$key])){
                $final_array[$key][array_keys($val)[0]] = $Array1[$key][array_keys($Array1[$key])[0]]+$Array2[$key][array_keys($Array2[$key])[0]];
         }else{
            $final_array[$key] = $val;
         }
    }
}

print_r($final_array);

输出: - https://eval.in/835143


You can do it like below:-

$final_array = array();

foreach($Array1 as $key=>$val){
     if(is_array($val) && is_array($Array2[$key])){
         if(array_keys($val)[0] == array_keys($Array2[$key])[0]){
            $final_array[$key][array_keys($val)[0]] = $Array1[$key][array_keys($Array1[$key])[0]]+$Array2[$key][array_keys($Array2[$key])[0]];
         }
     }

}

print_r($final_array);

Output:- https://eval.in/834913

A slight better approach:-

$final_array = array();

if(count($Array1) >= count($Array2)){

    foreach($Array1 as $key=>$val){
         if(is_array($val) && is_array($Array2[$key])){
                $final_array[$key][array_keys($val)[0]] = $Array1[$key][array_keys($Array1[$key])[0]]+$Array2[$key][array_keys($Array2[$key])[0]];
         }else{
            $final_array[$key] = $val;
         }
    }
}
if(count($Array1) < count($Array2)){

    foreach($Array2 as $key=>$val){
         if(is_array($val) && is_array($Array1[$key])){
                $final_array[$key][array_keys($val)[0]] = $Array1[$key][array_keys($Array1[$key])[0]]+$Array2[$key][array_keys($Array2[$key])[0]];
         }else{
            $final_array[$key] = $val;
         }
    }
}

print_r($final_array);

Output:- https://eval.in/835143

相关问答

更多

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。