文件传输(基于SOCKET编程)

2018-12-22 20:57

服务器端:

package sterning;

import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File;

import java.io.FileInputStream; import java.net.ServerSocket; import java.net.Socket;

public class ServerTest { int port = 8821;

void start() { Socket s = null;

try {

ServerSocket ss = new ServerSocket(port); while (true) {

// 选择进行传输的文件 String filePath = \

File fi = new File(filePath);

System.out.println(\文件长度:\

// public Socket accept() throws

// IOException侦听并接受到此套接字的连接。此方法在进行连接之前一直阻塞。

s = ss.accept();

System.out.println(\建立socket链接\

DataInputStream dis = new DataInputStream(new BufferedInputStream( s.getInputStream())); dis.readByte();

DataInputStream fis = new DataInputStream(new BufferedInputStream( new FileInputStream(filePath)));

DataOutputStream ps = new DataOutputStream(s.getOutputStream());

//将文件名及长度传给客户端。这里要真正适用所有平台,例如中文名的处理, //还需要加工,具体可以参见Think In Java 4th里有现成的代码。 ps.writeUTF(fi.getName()); ps.flush();

ps.writeLong((long) fi.length()); ps.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; }

ps.write(buf, 0, read); }

ps.flush();

// 注意关闭socket链接哦,不然客户端会等待server的数据过来, // 直到socket超时,导致数据不完整。 fis.close(); s.close();

System.out.println(\文件传输完成\ }

} catch (Exception e) { e.printStackTrace(); } }

public static void main(String arg[]) { new ServerTest().start(); }

}

2.sooket 的Util类 package sterning;

import java.net.*; import java.io.*;

public class ClientSocket { private String ip;

private int port;

private Socket socket = null;

DataOutputStream out = null;

DataInputStream getMessageStream = null;

public ClientSocket(String ip, int port) { this.ip = ip; this.port = port; }

/** *//**

* 创建socket连接 *

* @throws Exception * exception

*/

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 sendMessage(String sendMessage) throws Exception { try {

out = new DataOutputStream(socket.getOutputStream()); if (sendMessage.equals(\out.writeByte(0x1); out.flush(); return;

}

if (sendMessage.equals(\out.writeByte(0x2); out.flush(); return; }

if (sendMessage.equals(\out.writeByte(0x3); out.flush(); } else {

out.writeUTF(sendMessage); out.flush(); }

} catch (Exception e) { e.printStackTrace(); if (out != null) out.close(); throw e; } finally { } }

public DataInputStream getMessageStream() throws Exception { try {

getMessageStream = new DataInputStream(new BufferedInputStream( socket.getInputStream())); return getMessageStream; } catch (Exception e) { e.printStackTrace(); if (getMessageStream != null) getMessageStream.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) { }

} }

3.客户端: package sterning;

import java.io.BufferedOutputStream; import java.io.DataInputStream;

import java.io.DataOutputStream; import java.io.FileOutputStream;

public class ClientTest {

private ClientSocket cs = null;

private String ip = \设置成服务器IP

private int port = 8821;

private String sendMessage = \

public ClientTest() { try {

if (createConnection()) { sendMessage(); getMessage(); }

} catch (Exception ex) { ex.printStackTrace();

} }

private boolean createConnection() { cs = new ClientSocket(ip, port); try {

cs.CreateConnection();

System.out.print(\连接服务器成功!\ return true;

} catch (Exception e) {

System.out.print(\连接服务器失败!\ return false; } }

private void sendMessage() { if (cs == null) return; try {

cs.sendMessage(sendMessage); } catch (Exception e) {

System.out.print(\发送消息失败!\


文件传输(基于SOCKET编程).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《中国传统节日文化介绍》教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: