2011-04-24 156 views
2

我有一个客户端发送文件到服务器并发送其他值到server.I设法传输文件,但它不会打开,直到我关闭socket.So我为了发送文件在客户端创建了另一个套接字,但是服务器将它看作是另一个客户端,并增加了客户端编号,并给了我一个例外,以及说> Socketexception:软件导致连接中止:套接字写入错误。是客户端的代码,只是为了发送一个新的套接字,任何人都可以帮助我吗?在此先感谢。客户端发送文件到服务器的新套接字

try 
{ 
    Socket sendSock=new Socket("localhost", 8080); 
    outC.println("AcceptFile,"); 
    FileInputStream fis = new FileInputStream(p); 
    byte[] buffer = new byte[fis.available()]; 
    fis.read(buffer); 
    ObjectOutputStream oos = new ObjectOutputStream(sendSock.getOutputStream()) ; 
    oos.writeObject(buffer); 
    sendSock.close(); 
} 
catch(Exception c) 
{ 
    System.err.println("exc" + c); 
} 

回答

0

支持多连接的问题在服务器端。我没有看到你将如何解决客户端的服务器行为。它不支持一个会话中的多个连接。

+0

我只是想解决的,因为我发现我需要写文件后关闭插座。 – 2011-04-24 22:13:10

1

tl; dr - 不要制造新的插座。只需包装输出流并发送对象。

假设OUTC也是你的服务器的连接,这样做

outC.println("AcceptFile,"); 
FileInputStream fis = new FileInputStream(p); 
byte[] buffer = new byte[fis.available()]; 
fis.read(buffer); 
ObjectOutputStream oos = new ObjectOutputStream(originalSocket.getOutputStream()); 
oos.writeObject(buffer); 

这将一个对象写入底层流。

现在在服务器端,你可以做到这一点

if(clientMessage.equals("AcceptFile,")) { 
    ObjectInputStream ois = new ObjectInputStream(clientSocket.getInputStream()); 
    byte[] buffer = (byte[])ois.readObject(); 
    // do what you will with that 
} 
+0

@ glowcoder感谢您的回复,但之前我使用过这段代码,它正确地传输了文件,但是文件没有打开,除非我关闭套接字,那是我的问题。 – 2011-04-24 22:09:58

+0

@Fatema你是什么意思“文件未打开”?您正在通过套接字发送一个“byte []”。我期待着你将这个'byte []'写入一个文件并且以这种方式使用它(或者直接使用'byte []')。你能详细说明你的意思吗? “文件没有打开?” – corsiKa 2011-04-24 22:41:43

+0

@glowcoder我的意思是文件被创建为例子(source.pdf),但是当我尝试打开它,而服务器客户端应用程序仍在运行时,pdf阅读器程序显示一条消息说不能读取文件。但当我关闭应用程序并尝试打开文件时,它被正确读取。 – 2011-04-24 23:14:35

相关问题