我已经编写了以下代码,用于使用套接字从客户端向服务器发送文本文件。我对JAVA和Socket编程都很陌生。我觉得我有套接字的概念,但Java Streams很混乱。 以下代码的任何帮助将非常有帮助。 请提及推理的错误和解决方案。Java套接字编程和流
数据似乎发送得很好。但是在另一端没有收到。
服务器代码:
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(3000);
while(true)
{
Socket convSocket = serverSocket.accept();
System.out.println("connection accepted");
BufferedReader in = new BufferedReader(new InputStreamReader(convSocket.getInputStream()));
FileWriter fileOut = new FileWriter("/Users/aakashmalhotra/a.txt");
int c;
while((c = in.read()) != -1){
fileOut.write(c);
}
System.out.println("Transfer Done");
}
}
}
客户端代码:
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String[] argv) throws Exception {
Socket clientSocket = new Socket("localhost", 3000); // create a socket
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
BufferedReader fileIn = new BufferedReader(new FileReader("/Users/aakashmalhotra/s.txt"));
int c;
while ((c = fileIn.read()) != -1) {
out.write(c);
}
}
}
其中之一,你似乎并没有关闭你的读者或作家。 –
...和另一个“抛出异常”,而不是你的问题的原因,只是不应该做的。至少,捕捉异常和打印堆栈跟踪。 –
如果你不使用阅读器,而是使用Streams,它会更有效率,更普遍化。如果您只是复制字节,则不需要将字节转换为字符的麻烦 – MeBigFatGuy