java - 使用套接字发送请求行+文件 - java

标签 java sockets tcp stream

我正在尝试通过套接字发送“请求行”和文件。

客户端(发送方)

Socket socket = new Socket(hostName, SOCKET_PORT);
DataOutputStream os = new DataOutputStream(socket.getOutputStream());
FileInputStream fis = new FileInputStream(fileName);
os.writeBytes("PUT c:\dev\foo\helloworld.txt" + "\r\n")
byte[] buffer = new byte[1024];
int bytes;
while((bytes = fis.read(buffer)) != -1 ) {
    try {
        os.write(buffer, 0, bytes);
    } catch (IOException e) {e.printStackTrace();}
}

服务器(接收方)

ServerSocket serverSocket = new ServerSocket(SOCKET_PORT);
Socket clientSoc = serverSocket.accept();
InputStream inputStream = clientSoc.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String requestLine = bufferedReader.readLine();
File currentFile = (File)new ObjectInputStream(inputStream).readObject(); //This doesn't work
byteSequence = new byte[new Long(currentFile.length()).intValue()];
for(int i =0; i<currentFile.length();i++){
    byteSequence[i] = (byte)clientSoc.getInputStream().read();
} 
try {
    FileOutputStream newFile = new FileOutputStream(currentFile.getName());
    newFile.write(byteSequence,0, byteSequence.length);
} catch (IOException e) {e.printStackTrace();}

我能够读取服务器上的请求行,但是当我尝试读取文件时它会抛出异常(下一行)。

File currentFile = (File)new ObjectInputStream(inputStream).readObject(); 

java.io.Stream.CorruptedException:

java.io.StreamCorruptedException: invalid stream header: 0A48656C

我究竟做错了什么?

最佳答案

您正在尝试访问一个甚至没有传递给套接字的对象。您只传递了一个字节的字符串到服务器,但您从未使用 ObjectOutputStream 将对象传递给服务器。

关于java - 使用套接字发送请求行+文件 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23966640/

相关文章:

node.js - 为 WebSocket 和 net.Socket 分配唯一 ID

java - 我怎样才能使这个停止标准有效?

.net - 基于多人回合的 silverlight 游戏的服务器端

c - socket(PF_INET, SOCK_RAW, AF_INET) 使用 IGMP?

java - 使用 Eneter Messaging 和 Protocol Buffers 在 3g 网络上的端口 80 上启动 tcp 服务器的权限被拒绝

c++ - 如何在 C++ 中使用 recv 或 read 函数从 tcp 套接字读取大请求?

java - 当丹麦语设置为 VM 参数时,org.joda.time.DateTime 的 toString() 方法失败

java - GridBagLayout 给了我意想不到的行为

java - 程序无法识别字符串是什么