Socket传输信息或文件

依旧萌新看哈,因为我也是萌新一只。
这里用一台电脑模拟的,要是想两台本地改ipv4。
一、传输信息
服务器端:
依旧是一个普普通通的java.class,上代码

public static void main(String[] args){
        //socket.setKeepAlive(true);探测对方是否发生故障
        try ( ServerSocket server=new ServerSocket(8080)){
            System.out.println("正在等待客户链接...");
            Socket socket = server.accept();
           // socket.setSoTimeout(5000);//设置客户端响应时间不得超过5秒
            System.out.println("客户端已链接,Tp地址为" + socket.getInetAddress().getHostAddress());
       //数据传输
            //收
            System.out.println("读取客户端数据:");
            BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            System.out.println(reader.readLine());
            //发
            OutputStreamWriter writer=new OutputStreamWriter(socket.getOutputStream());
            writer.write("收到\n");
            writer.flush();
            socket.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

这里模拟客户端向服务器端发信息,然后服务器返回信息。

客户端:

 public static  void  main(String[] args)  {
        try (Socket socket=new Socket("localhost",8080);  Scanner scanner=new Scanner(System.in)){
            System.out.println("已连接到服务器");
            OutputStreamWriter writer=new OutputStreamWriter(socket.getOutputStream());
            writer.write(scanner.nextLine()+"\n");//没有换行符readeronlin读不了
            writer.flush();
            System.out.println("数据已发送,等待响应....");
            BufferedReader reader =new BufferedReader(new InputStreamReader(socket.getInputStream()));
            System.out.println("收到服务器响应:"+reader.readLine());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("服务器链接失败");
            e.printStackTrace();
        }
    }
}

启动服务器,再启客户端,在客户端输信息。

二、传文件
服务器

public class s3 {
    public static void main(String[] args) {

        try (ServerSocket server = new ServerSocket(8080)) {
            System.out.println("正在等待客户链接...");
            Socket socket = server.accept();
            System.out.println("客户端已链接,Tp地址为" + socket.getInetAddress().getHostAddress());
            InputStream stream = socket.getInputStream();
            FileOutputStream fileOutputStream=new FileOutputStream("data/test.txt");
            byte[] bytes=new byte[1024];
            int i;
            while((i=stream.read(bytes))!=-1){
                fileOutputStream.write(bytes,0,i);
            }
            fileOutputStream.flush();
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在项目上新建一个文件夹,可以随意起名,我这里起的data,传过来的文件会存在这个文件夹的test.txt中。test可以自己改,后缀名一点要和你传的文件后缀名相同。不用自己去data文件夹里新建test.txt,它传过来就自动有了,
还有就是,不用删!!!每次自动更新成最新传的文件。。。

客户端

 public static  void  main(String[] args)  {
        try (Socket socket=new Socket("localhost",8080)){
            System.out.println("已连接到服务器");
            FileInputStream fileInputStream=new FileInputStream("2.txt");
            OutputStream stream=socket.getOutputStream();
            byte[] bytes=new byte[1024];
            int i;
            while((i=fileInputStream.read(bytes))!=-1){//看有没有
                stream.write(bytes,0,i);
            }
            fileInputStream.close();
            stream.flush();
        } catch (IOException e) {
            System.out.println("服务器链接失败");
            e.printStackTrace();
        }
    }

}

兄弟们,2.txt是咱客户端传给服务器端的文件,注意下路径问题。这里直接存在了大项目里,注意下就行,不注意会报错的哈。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值