客户端发送文件到服务器的新套接字
我有一个客户端发送文件到服务器并发送其他值到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);
}
支持多连接的问题在服务器端。我没有看到你将如何解决客户端的服务器行为。它不支持一个会话中的多个连接。
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
}
@ glowcoder感谢您的回复,但之前我使用过这段代码,它正确地传输了文件,但是文件没有打开,除非我关闭套接字,那是我的问题。 – 2011-04-24 22:09:58
@Fatema你是什么意思“文件未打开”?您正在通过套接字发送一个“byte []”。我期待着你将这个'byte []'写入一个文件并且以这种方式使用它(或者直接使用'byte []')。你能详细说明你的意思吗? “文件没有打开?” – corsiKa 2011-04-24 22:41:43
@glowcoder我的意思是文件被创建为例子(source.pdf),但是当我尝试打开它,而服务器客户端应用程序仍在运行时,pdf阅读器程序显示一条消息说不能读取文件。但当我关闭应用程序并尝试打开文件时,它被正确读取。 – 2011-04-24 23:14:35
我只是想解决的,因为我发现我需要写文件后关闭插座。 – 2011-04-24 22:13:10