【问题标题】:Why can't send the correct data with sockets? JAVA (Client-Server Program running on local)为什么不能用套接字发送正确的数据? JAVA(在本地运行的客户端-服务器程序)
【发布时间】:2012-08-09 14:54:51
【问题描述】:

我正在尝试用 java 制作一个服务器客户端程序。我正在尝试在同一系统上运行。它从客户端向服务器发送一个文本文件,包括名称等。但是当服务器获取文件时,它只打印“[]”字符。这意味着 null 还是意味着数据损坏?

这里是服务器;

package temel;

import java.io.File;
import java.io.InputStream;
import java.net.Socket;
import java.net.ServerSocket;

public class VeriAlma {

  private static int port;

  private static Socket socket;
  public VeriAlma(int port)
  {
      VeriAlma.port=port;
  }
  public static void veriAl() {
    try {
        ServerSocket listener = new ServerSocket(port);

                socket = listener.accept(); 

    }
    catch (java.lang.Exception ex) {
      ex.printStackTrace(System.out);
    }
  }

  public String run() {
    try {
      InputStream in = socket.getInputStream();


        String file_name = "x.txt";

        File file=new File(file_name);

        ByteStream.toFile(in, file);
      return file_name;
    }
    catch (java.lang.Exception ex) {
      ex.printStackTrace(System.out);
      return "asdasd";
    }
  }
  public void setPort(int port)
  {
      VeriAlma.port=port;

  }
}

这里是客户端

package temel;
import java.io.*;
import java.net.*;
import java.lang.*;

import java.io.OutputStream;
import java.io.InputStream;
import java.io.File;
import java.io.FileOutputStream;

import java.net.Socket;

public class VeriGonderme {

      // host and port of receiver
      private static int    port;
      private static String host;

      public VeriGonderme(int port,String host)
      {
          this.port=port;
          this.host=host;
      }
      public void veriGonder(String dosyaIsmi) {
        try {
          Socket       socket = new Socket(host, port);
          OutputStream os     = socket.getOutputStream();


          ByteStream.toStream(os, 1);


            ByteStream.toStream(os, dosyaIsmi);
            ByteStream.toStream(os, new File(dosyaIsmi));
          }catch (Exception ex) {
          ex.printStackTrace();
        }
        }
      public void setPort(int port)
      {
          this.port=port;

      }
      public void setHost(String host)
      {
          this.host=host;

      }

      }

主机是“localhost”端口是 4444

This is the original code i modified it a little bit

【问题讨论】:

  • 您能打印出您发送的值和读取的值吗?
  • 还有一个问题。我需要重复 listener.accept() 行还是可以?顺便感谢您的关注。
  • 如果你有多个连接(曾经),你需要重复accept()

标签: java sockets io client-server


【解决方案1】:

但是当服务器获取文件时它只是打印“[]”字符。

我希望看到一些这样的字符,因为您将值 1 作为 4 字节二进制发送。即\0\0\0\u0001 如果你删除它并且只发送一次文件,它可能会如你所愿。

【讨论】:

  • 好的,我试试看。但我并没有完全得到重复的想法。我只会发送一个文件,但不知道何时发送。我的意思是“接受”是否打开端口并等待数据?或者它是否在处理线路时准确地接受数据?对不起大家。
  • 当您只期望文件的内容时,您正在调用 toStream 三次。 accept() 等待您已经在监听的端口并等待新的连接。当你读取数据时,它会等待一些数据。
  • 好的,我试试。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多