在做java的socket编程的时候碰到了问题,就是实现简单的客户端和服务器端相互发送文件的例子,具体如下
我打开了2个eclipse,一个里面写一个服务器类,当做服务器端,另一个写客户端类,当做客户端,就是我先做了客户端向服务器端发送文件,服务器端接受文件,是可以的,然后我接...
我打开了2个eclipse,一个里面写一个服务器类,当做服务器端,另一个写客户端类,当做客户端,就是我先做了客户端向服务器端发送文件,服务器端接受文件,是可以的,然后我接着添加服务器端向客户端发送文件,客户端接受文件的代码,运行的时候就在一个while循环里面卡住了····但是通过注释代码分别测试服务器端和客户端的接受和发送文件的功能是可以的,不知道为什么错了。。。服务器端代码如下,客户端与服务器端代码几乎一样,由于字数限制就不发了,请大神帮忙看下:
//导包,略,就是io和net包的东西
public class FileServer {
private static final int PORT=8888;
private ServerSocket server;
private Socket client;
private DataInputStream dis;
private FileOutputStream fout;
private FileInputStream fin;
private DataOutputStream dos;
public FileServer(){
while(true){
try {
server=new ServerSocket(PORT);
client=server.accept();
//接收客户端的文件
dis=new DataInputStream(client.getInputStream());
byte[] sendBytes=new byte[1024];
int len=0;
//写文件
fout=new FileOutputStream("d://.project");
while((len=dis.read(sendBytes))!=-1){
fout.write(sendBytes,0,len);
fout.flush();
}
// 向客户端发送文件
File file=new File("D://SingleServer.java");
dos=new DataOutputStream(client.getOutputStream());
fin=new FileInputStream(file);
//读取文件
byte[] sendBytes2=new byte[1024];
int leng=0;
while((leng=fin.read(sendBytes2, 0, sendBytes2.length))>0){
dos.write(sendBytes2,0,leng);
dos.flush();
}
client.close();
} catch (IOException e) {
e.printStackTrace();
}finally{
//就是对前面用的流进行关闭的代码,略
}
}
}
public static void main(String[] args) {
new FileServer();
}
} 展开
//导包,略,就是io和net包的东西
public class FileServer {
private static final int PORT=8888;
private ServerSocket server;
private Socket client;
private DataInputStream dis;
private FileOutputStream fout;
private FileInputStream fin;
private DataOutputStream dos;
public FileServer(){
while(true){
try {
server=new ServerSocket(PORT);
client=server.accept();
//接收客户端的文件
dis=new DataInputStream(client.getInputStream());
byte[] sendBytes=new byte[1024];
int len=0;
//写文件
fout=new FileOutputStream("d://.project");
while((len=dis.read(sendBytes))!=-1){
fout.write(sendBytes,0,len);
fout.flush();
}
// 向客户端发送文件
File file=new File("D://SingleServer.java");
dos=new DataOutputStream(client.getOutputStream());
fin=new FileInputStream(file);
//读取文件
byte[] sendBytes2=new byte[1024];
int leng=0;
while((leng=fin.read(sendBytes2, 0, sendBytes2.length))>0){
dos.write(sendBytes2,0,leng);
dos.flush();
}
client.close();
} catch (IOException e) {
e.printStackTrace();
}finally{
//就是对前面用的流进行关闭的代码,略
}
}
}
public static void main(String[] args) {
new FileServer();
}
} 展开
2个回答
展开全部
// server,同时注意socket的close
server=new ServerSocket(PORT);
client=server.accept();
// client 写法如下
String host = "127.0.0.1"; // 要连接的服务端IP地址
int port = 8899; // 要连接的服务端对应的监听端口
// 与服务端建立连接
Socket client = new Socket(host, port);
//建立连接后就可以往服务端写数据了
Writer writer = new OutputStreamWriter(client.getOutputStream());
writer.write("Hello Server.");
writer.flush();// 写完后要记得flush
writer.close();
client.close();
server=new ServerSocket(PORT);
client=server.accept();
// client 写法如下
String host = "127.0.0.1"; // 要连接的服务端IP地址
int port = 8899; // 要连接的服务端对应的监听端口
// 与服务端建立连接
Socket client = new Socket(host, port);
//建立连接后就可以往服务端写数据了
Writer writer = new OutputStreamWriter(client.getOutputStream());
writer.write("Hello Server.");
writer.flush();// 写完后要记得flush
writer.close();
client.close();
展开全部
上传完整文件把。分开服务端和客户端
追问
//我把这2个java文件放在我的百度网盘里面了,请帮忙看下,链接如下:
http://pan.baidu.com/s/1gd5nvxT
追答
个人见解:
你要把client和server 端的文件发送和文件接收方法分开。
然后记得每次接收或者发送后记得socket.close().你的原因应该是因为没有及时socket.close()
如果当前文件接受完后,自身有需要发送自身的信息或者文件发送,
先关闭文件接收socket,然后重新建立一个接收的socket,要善用线程。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询