c/s练习——多个客户端上传图片到服务端(tcp)

原创 2012年03月26日 13:35:57

我们使用tcp上传图片,设计思路是:服务端一直开着,客户端上传图片,需要给服务端一个图片的路径,在服务端使用客户端的文件名在保存。如果重名,我们就加一个序号。因为图片上传我们使用的是字节流,所有我们先用一个长度为100的字节数组开保存文件名。然后服务端使用前面一百个数据开获取文件名

下面贴出源码:

客户端:

package com.hsj.net.upload;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Arrays;
import java.util.Scanner;

public class UpLoadPicThreadClient {

    public static void main(String[] args) throws Exception {

        
        System.out.println("请输入你要上传的图片的路径:");        
        Scanner scanner=new Scanner(System.in);
        String filename=scanner.nextLine();
        if(!(filename.endsWith(".jpg")||filename.endsWith(".png")||filename.endsWith(".gif"))){
            throw new RuntimeException("请输入一个图片格式的文件");
        }
        File file=new File(filename);
        if(!file.exists()||!file.isFile()){
            throw new RuntimeException("你输入的不是一个存在的标准的文件");
        }
        if(file.length()>12*1024*1024){
            throw new RuntimeException("只能接受小于5m的图片");
        }
        Socket s=new Socket("128.0.0.47",10010);        
        FileInputStream filein=new FileInputStream(file);
        BufferedInputStream ips=new BufferedInputStream(filein);            
        String fileName=file.getName();
        
        byte[] filearr=Arrays.copyOf(fileName.getBytes(), 1024);
        
        InputStream in=s.getInputStream();
        
        OutputStream out=s.getOutputStream();        
        
        byte[] buf=new byte[1024];
        int len=0;
    
        out.write(filearr);
        
        while((len=ips.read(buf))!=-1){
            out.write(buf, 0, len);
            out.flush();
        }        
        s.shutdownOutput();        
        len=in.read(buf);
        String info=new String(buf,0,len);
        System.out.println(info);
        filein.close();
        ips.close();
        s.close();        
    }

}

==========================================================================================

需要多线程执行的代码,编写一个类实现runnable接口

package com.hsj.net.upload;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class ThreadUp implements Runnable {

    private Socket s;

    public ThreadUp(Socket s) {
        this.s = s;
    }

    public void run() {
        try {
            String addr = s.getInetAddress().getHostAddress();
            System.out.println("客户端ip: " + addr);
            InputStream in = s.getInputStream();
            OutputStream out = s.getOutputStream();
            byte[] buf = new byte[1024];
            int len = 0;
            byte[] filearr = new byte[1024];
            len = in.read(filearr, 0, 1024);
            int i = 0;
            for (; i < filearr.length; i++) {
                if (filearr[i] == 0)
                    break;
            }
            String info = new String(filearr, 0, i);
            File file = new File(info);
            int count = 1;
            while (file.exists()) {
                file = new File(info.substring(0, info.lastIndexOf(".")) + "("
                        + (count++) + ")"
                        + info.substring(info.lastIndexOf("."), info.length()));
            }
            BufferedOutputStream ops = new BufferedOutputStream(
                    new FileOutputStream(file));
            while ((len = in.read(buf)) != -1) {
                ops.write(buf, 0, len);
                ops.flush();
            }
            out.write("图片上传成功".getBytes());
            out.flush();
            s.shutdownOutput();
            s.close();
            ops.close();

        } catch (Exception e) {
        }
    }

}

==============================================

服务端代码:

package com.hsj.net.upload;

import java.net.ServerSocket;
import java.net.Socket;
public class UpLoadPicThreadServer {

    public static void main(String[] args) throws Exception {

        ServerSocket ss = new ServerSocket(10010);
        while(true){            
            Socket s = ss.accept();
            new Thread(new ThreadUp(s)).start();
        }
    }

}



C语言实现服务端和客户端进行TCP通信实例

 本文给出一个很实用的C语言实现的服务端和客户端进行TCP通信的小例子。具体实现上非常简单,只是平时编写类似程序,具体步骤经常忘记,还要总是查,暂且将其记下来,方便以后参考。 (1)客户端程序...
  • wpullo
  • wpullo
  • 2016年08月01日 11:47
  • 2258

(一)linux C语言TCP服务端/客户端简单编程步骤

由上图可知,TCP的服务端 5步就能完成基本功能。TCP客户端 3步就能完成基本功能。 接下来上基本代码:具体函数的操作等等再讲。 (为了使代码步骤更直观,这里不写错误处理语句) //TCP服务器 #...
  • u014453898
  • u014453898
  • 2016年12月24日 20:46
  • 1776

基于TCP的 C/S模式 网络应用程序

服务器端代码: #include #include void main() { //加载Windows Socket库 WORD wVersionRequested; WSADATA wsaD...
  • Crazy_xiaohe
  • Crazy_xiaohe
  • 2013年07月20日 08:38
  • 1654

使用TCP从客户端上传图片到服务器端

客户端: package upload.tcp; import java.io.FileInputStream; import java.io.IOException; import ...
  • fandoudou123
  • fandoudou123
  • 2015年10月27日 19:40
  • 689

TCP练习1:服务器端读取图片并发送给客户端,客户端保存图片到本地

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import...
  • motianlundejiyi
  • motianlundejiyi
  • 2015年05月08日 14:28
  • 1035

TCP协议下多个客户端向服务器发出消息

服务器端 public class Server { public static void main(String[] args) { try { S...
  • flying_fish_wj
  • flying_fish_wj
  • 2016年08月20日 16:10
  • 527

基于select模型的tcp服务器------一个服务器如何与多个客户端进行通信?

很多时候, 服务器都需要同时与多个客户端进行通信, 服务嘛, 就是这样。 下面, 我们用select模型来简要模拟一下这种情形。代码是最好的解释, 所以, 还是上代码吧:       服务端程序: #...
  • stpeace
  • stpeace
  • 2015年03月17日 22:00
  • 7608

基于TCP的服务器端/客户端(一)---------网络编程(linux----C)

基于TCP的服务器端/客户端(一)---------网络编程(linux----C) 1、TCP/IP协议 2、TCP/UDP层 3、TCP服务器端的默认函数调用顺序 (1)进入等待连接请...
  • liyuqian199695
  • liyuqian199695
  • 2016年12月17日 11:30
  • 608

第二篇:mina作为tcp服务器如何管理客户端

刚开始用这个玩意的时候,很多东西不是很了解,所以走了很多弯路,大概记录一下。 推荐大家去看看这篇博客,当初也是因为看了这篇博客,才知道自己理解错误的地方:点击打开链接 1.mina框架的编码解码工厂 ...
  • qq_31329751
  • qq_31329751
  • 2017年11月19日 21:45
  • 202

C++ Socket 一个服务器 多个客户端 (阻塞式)

服务端 ServerNet.h#pragma once #include #include #include #include #include #include #include #incl...
  • qq_17543531
  • qq_17543531
  • 2016年08月11日 21:47
  • 4723
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c/s练习——多个客户端上传图片到服务端(tcp)
举报原因:
原因补充:

(最多只允许输入30个字)