TCP协议上传文件到服务器步骤:
发送:
创建TCP客户端的Socket对象
读取源文件数据
获取输出流,写数据
释放资源
接收服务器反馈的信息
接收:
创建TCP服务器端的Socket对象
监听客户端连接
获取输入流,读取数据
把读到的数据全部写入目的文件
释放资源
给客户端一个反馈信息
快速获取本机IP地址的方法:打开dos命令窗口,输入ipconfig,回车
package com.itheima;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
//这是客户端类
class Client1 implements Runnable{
@Override
//重写run方法
public void run() {
Socket s=null;
try {
//创建客户端Socket对象
s=new Socket("192.168.1.128",2048);
//包装文件
BufferedReader br=new BufferedReader(new FileReader("Android.txt"));
//包装通道内输出流
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//定义一个字符数组
char chars[]=new char[1024];
//定义一个字符串d,表示读到一行字符
String d;
//读取文件,把读出来的字符数据全都写入输出流
while((d=br.readLine())!=null){
bw.write(d);
bw.newLine();
//刷新输出流
bw.flush();
}
//关闭客户端Socket输出流,否则加入反馈信息后,服务器和客户端会相互等待
s.shutdownOutput();
//接收来自客户端的反馈
byte bytes[]=new byte[1024];
InputStream is=s.getInputStream();
int a=is.read(bytes);
String c=new String(bytes,0,a);
System.out.println(c);
//关闭输入流
br.close();
//关闭客户端Socket
s.close();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
//关闭客户端Socket
s.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
//这是服务器类
class Server1 implements Runnable{
@Override
//重写run方法
public void run() {
try {
//创建服务器端Socket
ServerSocket ss=new ServerSocket(2048);
//监听并接收客户端Socket的连接
Socket s=ss.accept();
//包装文件
BufferedWriter br=new BufferedWriter(new FileWriter("ok.txt"));
//包装通道内输入流
BufferedReader bw=new BufferedReader(new InputStreamReader(s.getInputStream()));
//定义一个字符数组
char chars[]=new char[1024];
//定义一个字符串d,表示读到一行字符
String d;
//读取输入流中的字符数据并写到文本文件中
while((d=bw.readLine())!=null){
br.write(d);
br.newLine();
//刷新输出流
br.flush();
}
//给客户端一个反馈
OutputStream os=s.getOutputStream();
os.write("文本上传成功".getBytes());
//关闭输出流
br.close();
bw.close();
//关闭服务器Socket
ss.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("文本上传失败");
}
}
}
这是测试类
public class Test {
public static void main(String[] args) throws IOException, InterruptedException {
//创建对象client和server
Client1 client=new Client1();
Server1 server=new Server1();
//创建指定对象的线程
Thread t1=new Thread(client);
Thread t2=new Thread(server);
//启动线程
t1.start();
t2.start();
}
}
打开App,阅读手记