使用的类
ServerSocket 服务器端 构造方法:ServerSocket(端口号); 接收端使用 方法:accept(); 返回一个 Socket对象 getInetAddress();返回发送端的地址 InetAddress对象 Socket 客户端 发送端 构造方法: Socket(IP地址,端口号); Socket(主机名,端口号); 方法: getPort();返回端口号 getLocalAddress();获取Socket对象绑定的本地IP地址 getInputStream();获取一个输入对象 getOutputStream();获取一个输出对象1 服务器端创建: 2 import java.io.FileInputStream; 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 import java.net.Socket; 7 import java.net.UnknownHostException; 8 public class TCPSERver { 9 public static void main(String[] args) throws IOException {10 ServerSocket ss=new ServerSocket(8888);11 Socket sk=ss.accept();12 InputStream is=sk.getInputStream();13 File f=new File("D:\\test\\d");14 //判断服务器相对的文件夹是否存在15 if(!f.exists())16 {17 f.mkdir();18 }19 //文件名改为域名+毫秒值+6位随机数20 String filename="zys"+System.currentTimeMillis()+new Random().nextInt(99999);21 String path=f.getAbsolutePath()+File.separator+filename+".txt";22 FileOutputStream fo=new FileOutputStream(path);23 byte[] b=new byte[1024];24 int len=0;25 while((len=is.read(b))!=-1)26 {27 fo.write(b,0,len);28 }29 30 //回复客户端31 OutputStream out=sk.getOutputStream();32 out.write("上传成功".getBytes());33 //释放34 ss.close();35 fo.close();36 37 38 }39 }
1 创建客户端: 2 import java.io.File; 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.OutputStream; 7 import java.net.ServerSocket; 8 import java.net.Socket; 9 import java.util.Random;10 11 public class TCPSERver {12 public static void main(String[] args) throws IOException {13 ServerSocket ss=new ServerSocket(8888);14 Socket sk=ss.accept();15 InputStream is=sk.getInputStream();16 File f=new File("D:\\test\\d");17 //判断服务器相对的文件夹是否存在18 if(!f.exists())19 {20 f.mkdir();21 }22 //文件名改为域名+毫秒值+6位随机数23 String filename="zys"+System.currentTimeMillis()+new Random().nextInt(99999);24 String path=f.getAbsolutePath()+File.separator+filename+".txt";25 FileOutputStream fo=new FileOutputStream(path);26 byte[] b=new byte[1024];27 int len=0;28 while((len=is.read(b))!=-1)29 {30 fo.write(b,0,len);31 }32 33 //回复客户端34 OutputStream out=sk.getOutputStream();35 out.write("上传成功".getBytes());36 //释放37 ss.close();38 fo.close();39 40 41 }42 }
1 其他案例: 2 服务器使用多线程实现多人传送文件 3 将服务器实现代码实现Runnable接口 4 重写run方法,封装到run方法中 5 6 此代码中的ServerSocket ss=new ServerSocket(8888);接收文件语句封装到实现类中 7 import java.io.IOException; 8 import java.net.ServerSocket; 9 import java.net.Socket;10 11 public class Demo1 {12 public static void main(String[] args) throws IOException {13 ServerSocket ss=new ServerSocket(8888);14 //死循环一直接受客户端15 while(true)16 {17 Socket sk=ss.accept();18 MyRunnable mr=new MyRunnable(sk);19 new Thread(mr).start();20 21 }22 23 }24 }25 26 27 import java.io.File;28 import java.io.FileOutputStream;29 import java.io.IOException;30 import java.io.InputStream;31 import java.io.OutputStream;32 import java.net.Socket;33 import java.util.Random;34 35 public class MyRunnable implements Runnable{36 private Socket sk;37 38 public MyRunnable(Socket sk)39 {40 this.sk=sk;41 }42 43 public void run() {44 FileOutputStream fo=null;45 InputStream is=null;46 try{47 is=sk.getInputStream();48 File f=new File("D:\\test\\d");49 if(!f.exists())50 {51 f.mkdir();52 }53 //文件名改为域名+毫秒值+6位随机数54 String filename="zys"+System.currentTimeMillis()+new Random().nextInt(99999);55 String path=f.getAbsolutePath()+File.separator+filename+".txt";56 fo=new FileOutputStream(path);57 byte[] b=new byte[1024];58 int len=0;59 while((len=is.read(b))!=-1)60 {61 fo.write(b,0,len);62 }63 64 //回复客户端65 OutputStream out=sk.getOutputStream();66 out.write("上传成功".getBytes());67 68 }catch(IOException ex){69 ex.printStackTrace();70 }finally{71 try {72 fo.close();73 } catch (IOException e) {74 75 e.printStackTrace();76 } 77 }78 79 }80 81 }