用Socket进行文件的传输及保存 用socket实现 客户端读取本地文件并发送;服务器接收文件并保存到本地文件系统中,哪位大哥教教我啊,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.java3z.com/cwbwebhome/article/article5/5213.html?id=679 import java.net.*; import java.io.*; import javax.swing.*; public class Client { private Socket you; SendData sends; JFileChooser select; File file; String address = null; public Client() { try { select = new JFileChooser(); System.out.println( "输入服务器IP地址: "); BufferedReader bin = new BufferedReader(new InputStreamReader(System.in)); address = bin.readLine(); while(address == " " || address.length() == 0 || address == null) { System.out.println( "输入错误,请重新输入:( "); address = bin.readLine(); } bin.close(); you = new Socket(address,2007); System.out.println( "连接服务器监听端口:2007...... "); if(you != null) { System.out.println( "连接服务器成功,请选择文件:> "); select.showOpenDialog(null); file = select.getSelectedFile(); new Thread(new SendData(you,file)).start(); System.out.println( "发送完毕!关闭线程... "); } }catch(Exception e){System.out.println( "服务端运行出错! ");} } public static void main(String args[]) { new Client(); } } class SendData implements Runnable { private File files; private BufferedInputStream readFile = null; private DataInputStream din = null; private DataOutputStream dout = null; private Socket mySock = null; private String fileName; private byte data[] = new byte[1024]; public SendData(Socket you,File file) { this.mySock = you; files = file; fileName = files.getName(); } public void run() { try { readFile = new BufferedInputStream(new FileInputStream(files)); din = new DataInputStream(new BufferedInputStream(mySock.getInputStream())); dout = new DataOutputStream(new BufferedOutputStream(mySock.getOutputStream())); dout.writeUTF(fileName); while((readFile.read(data)) != -1) { dout.writeInt(1); dout.write(data,0,data.length); dout.flush(); } readFile.close(); dout.writeInt(0); clears(); }catch(Exception e){} finally { clears(); } } void clears() { try { dout.close(); din.close(); mySock.close(); }catch(Exception e){System.out.println( "关闭出错 ");} } } import java.net.*; import java.io.*; public class Server { private ServerSocket server; private Socket you; private receive rec; public Server() { try { server = new ServerSocket(2007); System.out.println( "服务器运行中,监听端口:2007...... "); while(true) { you = server.accept(); if(you != null) { System.out.println( "有客户连接启动接收线程... "); System.out.println( "接收文件中...... "); new Thread(new receive(you)).start(); } } }catch(Exception e){System.out.println( "服务端运行出错! ");} } public static void main(String args[]) { new Server(); } } class receive implements Runnable { private File files; private DataInputStream din = null; private DataOutputStream dout = null; private Socket mySock = null; private byte data[] = new byte[1024]; public receive(Socket you) { this.mySock = you; } public void run() { try { din = new DataInputStream(new BufferedInputStream(mySock.getInputStream())); dout = new DataOutputStream(new BufferedOutputStream(mySock.getOutputStream())); String fileName = din.readUTF(); BufferedOutputStream writeFile = new BufferedOutputStream( new FileOutputStream(fileName)); while(din.readInt() != 0) { din.read(data); writeFile.write(data,0,data.length); } writeFile.close(); clears(); System.out.println( "接收文件完毕!---> 服务器继续监听... "); }catch(Exception e){System.out.println( "接收出错! ");} finally { clears(); } } void clears() { try { dout.close(); din.close(); mySock.close(); }catch(Exception e){System.out.println( "关闭出错 ");} } } 去年回答别人的问题,呵呵先运行Server 编译运行通过,参考下 菜鸟求助 把mysql t_student表格的所有记录显示在JTable中 初学java,写个从一个字符串中提取偶数位字符组成新的字符(多多指教) 正则表达式中的匹配个数 没有报错,但是无法执行 单子模式修改。进来看看。 DataOutputStream -> writeUTF 方法 请教高手问题:在java中,我想调用windows的拷贝命令,怎么去调用啊。 谁会啊 哪个大神指点下啊 关于quartz框架的2点疑问 java需要多久的沉淀 JAVA初学 请高手给解决个问题 null能不能作为方法的参数
import java.io.*;
import javax.swing.*;
public class Client
{
private Socket you;
SendData sends;
JFileChooser select;
File file;
String address = null;
public Client()
{
try
{ select = new JFileChooser();
System.out.println( "输入服务器IP地址: ");
BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));
address = bin.readLine();
while(address == " " || address.length() == 0 || address == null)
{
System.out.println( "输入错误,请重新输入:( ");
address = bin.readLine();
}
bin.close();
you = new Socket(address,2007);
System.out.println( "连接服务器监听端口:2007...... ");
if(you != null)
{
System.out.println( "连接服务器成功,请选择文件:> ");
select.showOpenDialog(null);
file = select.getSelectedFile();
new Thread(new SendData(you,file)).start();
System.out.println( "发送完毕!关闭线程... ");
}
}catch(Exception e){System.out.println( "服务端运行出错! ");}
} public static void main(String args[])
{
new Client();
}
} class SendData implements Runnable
{
private File files;
private BufferedInputStream readFile = null;
private DataInputStream din = null;
private DataOutputStream dout = null;
private Socket mySock = null;
private String fileName;
private byte data[] = new byte[1024]; public SendData(Socket you,File file)
{
this.mySock = you;
files = file;
fileName = files.getName();
} public void run()
{
try
{
readFile = new BufferedInputStream(new FileInputStream(files));
din = new DataInputStream(new BufferedInputStream(mySock.getInputStream()));
dout = new DataOutputStream(new BufferedOutputStream(mySock.getOutputStream()));
dout.writeUTF(fileName);
while((readFile.read(data)) != -1)
{
dout.writeInt(1);
dout.write(data,0,data.length);
dout.flush();
}
readFile.close();
dout.writeInt(0); clears();
}catch(Exception e){}
finally
{
clears();
} } void clears()
{
try
{
dout.close();
din.close();
mySock.close();
}catch(Exception e){System.out.println( "关闭出错 ");}
} }
import java.io.*;
public class Server
{
private ServerSocket server;
private Socket you;
private receive rec;
public Server()
{
try
{
server = new ServerSocket(2007);
System.out.println( "服务器运行中,监听端口:2007...... ");
while(true)
{
you = server.accept();
if(you != null)
{
System.out.println( "有客户连接启动接收线程... ");
System.out.println( "接收文件中...... ");
new Thread(new receive(you)).start(); }
}
}catch(Exception e){System.out.println( "服务端运行出错! ");}
} public static void main(String args[])
{
new Server();
}
} class receive implements Runnable
{
private File files;
private DataInputStream din = null;
private DataOutputStream dout = null;
private Socket mySock = null;
private byte data[] = new byte[1024];
public receive(Socket you)
{
this.mySock = you; } public void run()
{
try
{
din = new DataInputStream(new BufferedInputStream(mySock.getInputStream()));
dout = new DataOutputStream(new BufferedOutputStream(mySock.getOutputStream()));
String fileName = din.readUTF();
BufferedOutputStream writeFile = new BufferedOutputStream(
new FileOutputStream(fileName));
while(din.readInt() != 0)
{
din.read(data);
writeFile.write(data,0,data.length);
}
writeFile.close();
clears();
System.out.println( "接收文件完毕!---> 服务器继续监听... ");
}catch(Exception e){System.out.println( "接收出错! ");}
finally
{
clears();
} } void clears()
{
try
{
dout.close();
din.close();
mySock.close();
}catch(Exception e){System.out.println( "关闭出错 ");}
} } 去年回答别人的问题,呵呵
先运行Server 编译运行通过,参考下