为了账号安全,请及时绑定邮箱和手机立即绑定

Socket编程-TCP协议上传文本文件到服务器

标签:
Java
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();
    }
}
点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
移动开发工程师
手记
粉丝
9
获赞与收藏
227

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消