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

我的tcp客户端/服务器程序中没有写入值

颜昕
2023-03-14

在我的TCP套接字程序中,我必须将数据从客户端发送到服务器。在服务器端,我必须读取流并将其写入文件。但是文件是创建的,里面什么都没有写。

客户端编码发送文件:

try
{

    Socket ss = new Socket("localhost", 5010);

    BufferedOutputStream put = new BufferedOutputStream(ss.getOutputStream());
    BufferedReader st = new BufferedReader(new InputStreamReader(ss.getInputStream()));

    File f = new File("e://read.txt");
    FileInputStream fis = new FileInputStream(f);
    byte buf[] = new byte[1024];
    int read;
    while((read = fis.read(buf, 0, 1024)) != -1)
    {
        put.write(buf,0,read);
        put.flush();
    }
    //d.close();
    System.out.println("File transfered");
    ss.close();

}
catch(Exception e)
{
    System.out.println(e);
}

服务器读取输入流并将其写入文件:

try
{
    ServerSocket ss = new ServerSocket(5010);
    Socket s = ss.accept();
    BufferedReader get = new BufferedReader(new InputStreamReader(s.getInputStream()));

    FileWriter writedata = new FileWriter("c://write.txt");

    BufferedWriter bw = new BufferedWriter(writedata);

    String line=bw.toString();
    while ((line = get.readLine()) != null) {
        bw.write(line + "\n");
    }
}
catch(Exception e)
{
    System.out.println(e);
}

到底是什么问题?

共有2个答案

慕宏峻
2023-03-14

除非你知道数据是文本,否则不要使用读卡器和写卡器。使用InputStreams和OutputStreams,并复制它们,以便:

while ((count = in.read(buffer)) > 0)
{
  out.write(buffer, 0, count);
}
out.close();
in.close();

在客户端和服务器中都使用此逻辑。

笔记:

  1. flush()放入该循环中会适得其反
谭鹏云
2023-03-14

你忘了。关闭并关闭。脸红下面是有效的代码。。。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;


public class TestServer
{
    public static void main(String[] args)
    {
        try
        {
        ServerSocket ss=new ServerSocket(5010);
        Socket s=ss.accept();
        BufferedReader get= new BufferedReader(new InputStreamReader(s.getInputStream()));

        FileWriter writedata=new FileWriter("c://Test//testoutput.txt");

        BufferedWriter bw=new BufferedWriter(writedata);

        String line=bw.toString();
        while ((line = get.readLine()) != null) {

            bw.write(line + "\n");

        }
        bw.flush();
        bw.close();
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
}


import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class TestClient
{
    public static void main(String[] args)
    {
        try
        {

           Socket ss=new Socket("localhost",5010);

           BufferedOutputStream put=new BufferedOutputStream(ss.getOutputStream());
           BufferedReader st=new BufferedReader(new InputStreamReader(ss.getInputStream()));

           File f=new File("c://Test//testinput.txt");
           FileInputStream fis=new FileInputStream(f);
           byte buf[]=new byte[1024];
           int read;
           while((read=fis.read(buf,0,1024))!=-1)
           {
               put.write(buf,0,read);
               put.flush();
           }
           //d.close();
           System.out.println("File transfered");
           ss.close();
           ss.close();


        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
}
 类似资料:
  • 创建 TCP 客户端 最简单的方法来创建一个 TCP 客户端,使用默认选项如下所示: NetClient client = vertx.createNetClient(); 配置 TCP 客户端 如果你不想使用默认值,则创建TCP 客户端时,通过传入NetClientOptions实例可以配置: NetClientOptions options = new NetClientOptions().s

  • 创建 TCP 服务器 使用最简单的方法来创建一个 TCP 服务器,使用所有默认选项如下所示: NetServer server = vertx.createNetServer(); 配置 TCP 服务器 如果你不想默认值,可以将服务器配置通过传入一个NetServerOptions实例来创建它: NetServerOptions options = new NetServerOptions().s

  • Vert.x 可以轻松地编写非阻塞的 TCP 客户端和服务器。

  • 我正在使用TCP / IP流编写客户端服务器Java程序,我的服务器连接到oracle数据库。当客户端请求一些信息时,服务器处理查询,即返回一个包含一些行的列(例如 5)。我想将整列发送回客户端,我能够发送和接收单行数据,但不能发送和接收多行(因为表包含许多行 i,e 行)....任何帮助都是可取的

  • 在探索和实现Proact设计模式后,遇到了一个问题,即客户端(“C”客户端)连接在限制后不再接受。开始探索netty。这是我试图做的1。C客户端建立连接2。Java服务器接受连接并开始使用TCP向客户端发送8 Mb大小的字节缓冲区。有什么想法吗?netty是一个好的选择吗?我浏览了netty的一个很好的例子,不幸的是不走运。 先谢谢你。 尊敬的Ravi