实现服务器能同时接收多个客户端访问
- import java.io.*;
- import java.net.*;
- class NtClient//客户端
- {
- public static void sop(Object obj)//自定义输出方法
- {
- System.out.println(obj);
- }
- public static void main(String[] args)throws Exception
- {
- if(args.length!=1)//判断是否传入参数
- {
- sop("请选择一个jpg格式的图片");
- return;
- }
- File file=new File(args[0]);//将图片地址转换为File对象
- if(!(file.exists()&&file.isFile()))
- {
- sop("文件有问题");
- return;
- }
- if(!file.getName().endsWith(".jpg"))
- {
- sop("图片格式错误");
- return;
- }
- if(file.length()>1024*1024*5)
- {
- sop("文件过大");
- return;
- }
- Socket s=new Socket("127.0.0.1",10005);//连接服务器及端口
- FileInputStream fis=new FileInputStream(file);//创建流输入对象
- OutputStream out=s.getOutputStream();//创建流输出对象
- byte[] buf=new byte[1024];
- int len=0;
- while((len=fis.read(buf))!=-1)
- {
- out.write(buf,0,len);
- }
- s.shutdownOutput();//网络传输结束
- InputStream in=s.getInputStream();//接收服务器端返回信息
- byte[] bufIn=new byte[1024];
- int num=in.read(bufIn);
- System.out.println(new String(bufIn,0,num));
- fis.close();
- s.close();
- }
- }
- class NtThread implements Runnable//实现多线程上传
- {
- private Socket s;
- NtThread(Socket s)
- {
- this.s=s;
- }
- public void run()
- {
- String ip=s.getInetAddress().getHostAddress();//客户端地址
- try
- {
- int count=1;
- System.out.println(ip+"...connected");
- InputStream in=s.getInputStream();//接收数据
- File file=new File(ip+"("+(count)+").jpg");//创建服务器端文件
- while(file.exists())
- file=new File(ip+"("+(count++)+").jpg");
- FileOutputStream out=new FileOutputStream(file);
- byte[] buf=new byte[1024];
- int len=0;
- while((len=in.read(buf))!=-1)//将接收数据写入服务器端文件中
- {
- out.write(buf,0,len);
- }
- OutputStream op=s.getOutputStream();//往客户端返回信息
- op.write("上传完成".getBytes());
- out.close();
- s.close();
- }
- catch(Exception e)
- {
- throw new RuntimeException(ip+"上传失败");
-
- }
- }
- }
- class NtServer//服务器端
- {
- public static void main(String[] args)throws Exception
- {
- ServerSocket ss=new ServerSocket(10005);
- while(true)
- {
- Socket s=ss.accept();
- new Thread(new NtThread(s)).start();
- }
- }
- }
复制代码 |
|