1.客户端和服务器利用Tcp构建,实现两台计算机之间的通信,通信的两端都需要创建socket对象。
服务器:
//创建端口(创建接收端对象)
ServerSocket serverSocket = new ServerSocket(8888);
//监听
Socket socket = serverSocket.accept();
客户端:
//创建发送端Socket对象(创建连接)
Socket socket = new Socket("172.0.0.1", 8888);
2. 客户端连接好服务器后,下面就开始从本地用BufferedInputStream输入流读文件,然后用DataOutputStream写文件,利用scoket传输到服务器端。
DataOutputStream dataOutputStream = null;
BufferedInputStream bufferedInputStream = null;
Socket socket = null;
//文件路径
File file = new File("D:\\凯文-杜兰特 绝杀.mp4");
//接收文件名称
String name = file.getName();
try {
//创建连接
socket = new Socket("192.168.90.149", 9999);
//写文件,并用scoket传输到服务器端
dataOutputStream = new DataOutputStream(socket.getOutputStream());
//从本地读文件
bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
dataOutputStream.writeUTF(name);
int len;
//读的长度及以字节的形式来读写
byte[] b = new byte[1024];
while ((len=bufferedInputStream.read(b))!=-1) {
//写文件
dataOutputStream.write(b, 0, len);
//刷新
dataOutputStream.flush();
}
3.服务器端用dataInputStream 接收客户端发来的文件,然后用bufferedOutputStream 写到本地。这样就ok了!
ServerSocket serverSocket = null;
Socket socket = null;
DataInputStream dataInputStream = null;
BufferedOutputStream bufferedOutputStream = null;
File file = new File("D:\\test");
if(!file.exists()) {
file.mkdirs();
}
try {
//创建端口(创建接收端对象)
serverSocket = new ServerSocket(9999);
//监听对象
socket = serverSocket.accept();
//接收socket传输的文件
dataInputStream = new DataInputStream(socket.getInputStream());
//获得传输文件的名字
String name = dataInputStream.readUTF();
//拷贝后文件的名字
File file2 = new File(file+File.separator+name);
//把读进来的文件写到本地
bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file2));
int len;
byte[] b = new byte[1024];
while((len=dataInputStream.read(b))!=-1) {
bufferedOutputStream.write(b, 0, len);
bufferedOutputStream.flush();
}
4.源码
服务器:
package com.xin03;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
DataInputStream dataInputStream = null;
BufferedOutputStream bufferedOutputStream = null;
File file = new File("D:\\test");
if(!file.exists()) {
file.mkdirs();
}
try {
//创建端口(创建接收端对象)
serverSocket = new ServerSocket(9999);
//监听对象
socket = serverSocket.accept();
//接收socket传输的文件
dataInputStream = new DataInputStream(socket.getInputStream());
//获得传输文件的名字
String name = dataInputStream.readUTF();
//拷贝后文件的名字
File file2 = new File(file+File.separator+name);
//把读进来的文件写到本地
bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file2));
int len;
byte[] b = new byte[1024];
while((len=dataInputStream.read(b))!=-1) {
bufferedOutputStream.write(b, 0, len);
bufferedOutputStream.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("端口错误!!!");
}finally {
try {
bufferedOutputStream.close();
dataInputStream.close();
serverSocket.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
客户端:
package com.xin03;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) {
DataOutputStream dataOutputStream = null;
BufferedInputStream bufferedInputStream = null;
Socket socket = null;
//文件路径
File file = new File("D:\\凯文-杜兰特 绝杀.mp4");
//接收文件名称
String name = file.getName();
try {
//创建连接
socket = new Socket("192.168.90.149", 9999);
//写文件,并用scoket传输到服务器端
dataOutputStream = new DataOutputStream(socket.getOutputStream());
//从本地读文件
bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
dataOutputStream.writeUTF(name);
int len;
//读的长度及以字节的形式来读写
byte[] b = new byte[1024];
while ((len=bufferedInputStream.read(b))!=-1) {
//写文件
dataOutputStream.write(b, 0, len);
//刷新
dataOutputStream.flush();
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
//关闭
dataOutputStream.close();
bufferedInputStream.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}