白痴爱面包 发表于 2023-4-14 21:18:15

socket类出现的问题,代码纠错

这是客户端的代码
public class Client{
      public static void main(String args[])throws IOException {
    //创建Socket对象,并连接服务器
    Socket socket = new Socket("127.0.0.1",10000);
    //读取本地文件的数据,并写到服务器中

    BufferedReader brd = new BufferedReader(new InputStreamReader(new FileInputStream("d://新建文件夹//xinyue.txt"), "UTF-8"));
    String s1 = brd.readLine();
    System.out.println(s1);
    BufferedWriter x = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
   
    x.write(s1);
    //往服务器写出结束标记
    socket.shutdownOutput();
    socket.close();
}
}
服务端的代码
public class Serverx{
        public static void main(String args[]) throws IOException{
        //创建对象并绑定端口       
    ServerSocket ss = new ServerSocket(10000);
    //等待客户端连接
   
    Socket socket = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    BufferedWriter bh = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d://新建文件夹//xiao.txt"), "UTF-8"));
    String s;
   
   while ((s = br.readLine()) != null) {
           System.out.println(s);
            bh.write(s);
            bh.newLine();
            bh.flush();
      }
socket.close();
    ss.close();
}
}
为什么新建的文件“xiao”为空

歌者文明清理员 发表于 2023-4-14 21:38:03

根据你提供的客户端和服务端代码,可以看出你的程序是将从本地读取的文件中的第一行数据发送给服务器,服务器接收到数据后将其写入到本地的 "xiao.txt" 文件中。

由于你只读取了文件的第一行数据,所以客户端发送给服务器的也只有这一行数据。如果文件中只有一行数据,那么服务端写入的 "xiao.txt" 文件中也只会有这一行数据。

如果你的 "xiao.txt" 文件是空的,可能有以下原因:

新建的 "xiao.txt" 文件并没有在客户端发送数据之前被清空,导致之前的内容仍然存在,从而覆盖了客户端发送的数据。

客户端发送的文件中只有空行或者第一行数据是空的,导致服务端接收到的数据也为空。

你可以检查以上两个原因来解决问题。此外,你也可以在客户端发送数据之前打印出从文件中读取的数据,以便更好地排查问题。

isdkz 发表于 2023-4-14 21:41:21

问题在于,客户端和服务端之间的数据传输没有使用换行符,而在服务端读取数据时使用了readLine()方法,它会读取到换行符为止。我们需要修改客户端和服务端代码来解决这个问题。

首先在客户端代码中,在x.write(s1);后面添加一个换行符。将其更改为:

x.write(s1);
x.newLine();
x.flush();


然后在服务端代码中,在写入到文件时,我们需要删除bh.newLine();。现在你的服务端代码应该是这样的:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Serverx{
    public static void main(String args[]) throws IOException{
      //创建对象并绑定端口
      ServerSocket ss = new ServerSocket(10000);
      //等待客户端连接
      Socket socket = ss.accept();

      BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
      BufferedWriter bh = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d://新建文件夹//xiao.txt"), "UTF-8"));
      String s;

      while ((s = br.readLine()) != null) {
            System.out.println(s);
            bh.write(s);
            bh.flush();
      }
      socket.close();
      ss.close();
    }
}


现在运行代码,你应该能看到新建的文件“xiao.txt”包含客户端发送的数据。

白痴爱面包 发表于 2023-4-14 21:44:36

歌者文明清理员 发表于 2023-4-14 21:38
根据你提供的客户端和服务端代码,可以看出你的程序是将从本地读取的文件中的第一行数据发送给服务器,服务 ...

验证之后发现服务端接收的数据为空,所以文件为空,所以这又是为啥呀
页: [1]
查看完整版本: socket类出现的问题,代码纠错