TCP实现连接传输案例
Posted xiaozhang666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP实现连接传输案例相关的知识,希望对你有一定的参考价值。
使用的类
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 }
以上是关于TCP实现连接传输案例的主要内容,如果未能解决你的问题,请参考以下文章