TCP主要用于收发文件,它与UDP不同,如同QQ视频一样,对方必须接受才能开始,它主要有ServeSocket和Socket两个类,ServeSocket为服务端Socket为客户端,都可以实现收发文件的操作。
当客户端发送文件到服务端时客户端主要步骤是:
1.客户端创建Socket对象(服务器IP,端口)
2.Socket对象方法 getOutputStream获取字节输出流,写到服务器
3.关闭客户端资源
服务端主要操作是:
1. 创建ServerSocket对象,打开端口
2. 使用ServerSocket对象方法accept获取客户端连接对象
3 Socket getInputStream获取字节输入流,读取客户端发来数据,将数据存储
4 关闭服务端
package tcp;
/**
* 客户端发送文件到服务端
* 1.新建客户端对象,设置服务端端口和IP
* 2.新建输出流将文件或数据发送到服务端
* 3.关闭资源
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Client1 {
public static void main(String[] args) {
//Socket对象,服务器端口,IP
Socket socket = null;
//捕捉异常服务器的端口和IP不存在
try {
socket = new Socket("127.0.0.1",2000);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//输出流,将文件发送到服务端
OutputStream outputStream = null;
try {
outputStream = socket.getOutputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//读取文件
File file=new File("/home/z/桌面/a1.png");
//输出图片
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//输出
byte[] bs=new byte[1024];
int len=0;
try {
while((len=fileInputStream.read(bs))!=-1)
{
outputStream.write(bs);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//关闭
try {
socket.close();
outputStream.close();
fileInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package tcp;
/**
* 服务器接受客户端发送的文件
* 1.设置服务器的端口(运行时需要先把服务端口打开)
* 2.使用accept方法获取连接对象
* 3.新建输入流接受客户端发来的数据
* 4.新建输出流把输入的数据写入文件
* 5.关闭资源
*/
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
public class Serve1 {
public static void main(String[] args) {
//服务器打开端口
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(2000);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//使用accept获取客户端连接对象
Socket socket = null;
try {
socket = serverSocket.accept();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//输入流接收客户端发来的文件
InputStream inputStream = null;
try {
inputStream = socket.getInputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//保存的文件地址
File file =new File("/home/z/桌面/new/tu.png");
//输出到文件
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int len=0;
//写入输出
byte[] bs=new byte[1024];
try {
while ((len=inputStream.read(bs))!=-1)
{
fileOutputStream.write(bs, 0, len);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//关闭资源
}finally{
try {
socket.close();
inputStream.close();
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}