代码改变世界

tcp编程

2012-03-19 18:43  党飞  阅读(341)  评论(0)    收藏  举报

---------------------- android培训java培训、期待与您交流! ----------------------

上节实现了udp的传输,现在看看tcp的网络编程是怎么实现的。

tcp有客户端和服务器端之分,对应的有两个类Socket和ServerSocket.

那么我们首先需要建立客户端和服务器端,连接建立后,通过Socket中的IO流就行数据传输,最后关闭Socket。

下面看一个例子:

下面这个例子实现从客户端传输一个文件到服务器端。

先建立一个服务器端:

public static void main(String[] args) {
  // TODO Auto-generated method stub
  ExecutorService eService = Executors.newCachedThreadPool();
  eService.execute(new Runnable() {
   
   @Override
   public void run() {
    new Server("f:\\tt").start(); //初始化上传文件存储位置   
   }
  });
 }
 public  Server(String root){
  this.root=root;
 } 
    private Socket socket;
    private String root;     //上传文件根路径
    private String fileName;
 void start(){
  System.out.println("服务器已启动。");
  try {
   ServerSocket serverSocket = new ServerSocket(8899);
   socket = serverSocket.accept();
   
   InputStream inStream=socket.getInputStream();
   byte[] bufIn=new byte[1024];
   int num =inStream.read(bufIn);
   String server=new String(bufIn,0,num);
   if(server.startsWith("||"))
    fileName=server.substring(2);
   
   InputStream inputStream=socket.getInputStream();
   FileOutputStream foStream = new FileOutputStream(root+"\\"+fileName);
   byte[] buf=new byte[1024];
   
   int len=0;
   while((len=inputStream.read(buf))!=-1)
   {
    foStream.write(buf, 0, len);
   }
   foStream.close();
   serverSocket.close();
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
 }

上面这段代码实现对本机8899端口的监听,并实现把接收到的数据存入本地磁盘。

建立客户端:

public static void main(String[] args) {
  // TODO Auto-generated method stub
        new Client().transFile("d:\\shaoVir.exe");  //指定要上传文件所在位置
 }
  private Socket socket;


 void transFile(String path){
  
  try {
   socket = new Socket(InetAddress.getLocalHost().getHostAddress(),8899);
   OutputStream outputStream = socket.getOutputStream();
   File file =new File(path);
   outputStream.write(("||"+file.getName()).getBytes());
   outputStream.flush();
   System.out.println("传输文件:"+file.getName());
   FileInputStream fiStream=new FileInputStream(path);
   
   byte[] buf=new byte[1024];
   int len=0;
   while((len=fiStream.read(buf))!=-1)
   {
    outputStream.write(buf, 0, len);
   }
   outputStream.flush();
   outputStream.close();
   //socket.shutdownOutput();
   System.out.println("传输完成");
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

客户端建立tcp连接,并负责把指定文件上传到服务器端。

---------------------- android培训java培训、期待与您交流! ----------------------