Java利用socket连接到一台主机并向主机发送文件
2017-04-05 17:19
337 查看
分为服务器端和客户端。这里服务器端是等待连接并接受文件的机器,客户端是连接服务器端并且发送文件的机器。
1.服务器端/** * server接受连接,接收文件 * */ public class ServerTest { private int port = 8821; // 启动服务 private void start() { Socket s = null; try { ServerSocket ss = new ServerSocket(port); while (true) { s = ss.accept(); System.out.println("建立socket链接"); DataInputStream dis = new DataInputStream( new BufferedInputStream(s.getInputStream())); try { int bufferSize = 8192; byte[] buf = new byte[bufferSize]; String filename = dis.readUTF(); System.out.println("接收文件名 " + filename); DataOutputStream fileOut = new DataOutputStream( new BufferedOutputStream(new FileOutputStream( filename)));// 这个参数是保存路径 System.out.println("开始接收文件!" + "\n"); while (true) { int read = 0; if (dis != null) { read = dis.read(buf); } if (read == -1) { break; } fileOut.write(buf, 0, read); } System.out.println("接收完成。"); fileOut.close();dis.close(); } catch (Exception e) { System.out.println("接收消息错误" + "\n"); return; } } } catch (Exception e) { e.printStackTrace(); } } public static void main(String arg[]) { new ServerTest().start(); } }
上面是服务器端的代码:
1、声明一个socket并且绑定本地机器的一个端口。
2、等待连接
3、获取socket的输入流
4、读取传送过来的文件名
5、声明一个文件输出流用于输出接收到的文件
6、从socket输入流读取数据,写入到文件输出流
7、关闭连接
2.下面看客户端的流程。
代码1(客户端代码):
import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.IOException; import java.net.Socket; /** * 客户端发起连接 */ public class ClientSocket { private String ip; private int port; private S 4000 ocket socket = null; DataOutputStream out = null; DataInputStream getMessageStream = null; public ClientSocket(String ip, int port) { this.ip = ip; this.port = port; } /** * 发送文件 * * @param filename * @throws IOException */ public void sendFile(String filename) throws IOException { out = new DataOutputStream(socket.getOutputStream());// 获取输出流 // 向输出流中写入文件 DataInputStream fis = new DataInputStream(new BufferedInputStream( new FileInputStream(filename))); // 写入文件名 out.writeUTF(filename); out.flush(); int bufferSize = 8192; byte[] buf = new byte[bufferSize]; while (true) { int read = 0; if (fis != null) { read = fis.read(buf); } if (read == -1) { break; } out.write(buf, 0, read); } out.flush(); // 关闭资源 out.close(); fis.close(); } /** * 创建socket连接 */ public void CreateConnection() throws Exception { try { socket = new Socket(ip, port); } catch (Exception e) { e.printStackTrace(); if (socket != null) socket.close(); throw e; } finally { } } public void shutDownConnection() { try { if (out != null) out.close(); if (getMessageStream != null) getMessageStream.close(); if (socket != null) socket.close(); } catch (Exception e) { e.printStackTrace(); } } }
clientsocket类负责发送文件。
代码2(测试代码):
public class ClientTest { private ClientSocket cs = null; private boolean createConnection(String ip, int port) { cs = new ClientSocket(ip, port); try { cs.CreateConnection(); System.out.print("连接服务器成功!" + "\n"); return true; } catch (Exception e) { System.out.print("连接服务器失败!" + "\n"); return false; } } // 发送请求,filename为文件路径 private void sendFile(String filename) { if (cs == null) return; try { cs.sendFile(filename); } catch (Exception e) { System.out.print("发送消息失败!" + "\n"); } } // 实现请求并接收 public void sendFile(String filename, String savePath, String host, int port, String username, String password) { if (this.createConnection(host, port)) { this.sendFile(filename); } } // 测试 public static void main(String arg[]) { ClientTest ct = new ClientTest(); ct.sendFile("c:\\b.png", "D:\\c.png", "192.168.169.133", 8821, "username", "password"); } }
客户端代码工作流程:
1、建立连接
2、获取socket的输出流,用于向其中写入要发送的文件名以及文件
3、关闭资源
相关文章推荐
- Java利用socket连接到一台主机并向主机发送文件
- [Java]利用DOM解析DOM文件|利用socket发送XML DOM
- java网络编程-利用datagramsocket和datagrampacket实现一台机器向另一台机器传文件
- java实现socket连接,向指定主机指定端口发送socket数据,并获取响应数据
- [Java]利用Scoket发送各类文件-实例代码-长连接-极简代码-TCP协议
- java,利用一个socket发送多个文件
- 利用java Socket发送,接收文件.
- Java利用TCP协议发送文件(一)--服务器端
- java连接oracle数据库(利用MyEclipse开发工具反向生成 bean与配置文件)
- Java实现Socket发送和接收文件的代码(java 粘包个人联系)
- 关于socket通信的理解,socket连接通过IP+端口号的方式,那么如果两个服务器端的应用在同一台机器上,并且位于同一个tomcat容器下,那么岂不是两个服务器都收到了客户端发送的信息
- 在silverlight中利用socket发送图片或文件
- 利用java socket传输文件
- Java利用socket传输文件
- 解决:使用java连接Fastdfs,上传文件时报:SocketTimeOutException的问题.
- JAVA_WEB项目之在myecplise中如何利用DB Browser窗口连接mysql数据库之后根据表反向生成映射文件
- Java利用HttpURLConnection发送post请求上传文件
- Java 小例子:通过 Socket 发送和接收文件
- java连接oracle数据库(利用MyEclipse开发工具反向生成 bean与配置文件)
- Java利用HttpURLConnection发送post请求上传文件