代码1-1与代码1-2是一个java网络编程Socket通信的一个简单例子,服务端(先启动)监听客户端,当客户端启动时,服务端打印出客户端的输出的消息。

  • 1-1 Socket通信之服务端的代码
 
  
  1. import java.io.InputStream; 
  2. import java.net.ServerSocket; 
  3. import java.net.Socket; 
  4.  
  5. //先运行服务端,对客户端进行监听,接受客户端发送的信息 
  6. //注意这里只是展示Socket通信的简单例子,在实际使用中,对于异常应该捕获,最好不要抛出 
  7. public class Server { 
  8.     public static void main(String[] args) throws Exception { 
  9.         ServerSocket serverSocket=new ServerSocket(8888); 
  10.         Socket socket=serverSocket.accept(); 
  11.          
  12.         InputStream is=socket.getInputStream();   //找到接口 
  13.         //写出 
  14.         byte[] buff=new byte[1024];     //缓冲,输出 
  15.         int ch; 
  16.         System.out.println("服务端输出客户端传来的信息:"); 
  17.         while((ch=is.read(buff))!=-1){ 
  18.             for (int i = 0; i < ch; i++) { 
  19.                 System.out.print((char)buff[i]); 
  20.             } 
  21.         } 
  22.         is.close();    
  23.     } 
  • 1-2 Socket通信之客户端的例子的代码

 

 
  
  1. import java.io.OutputStream; 
  2. import java.net.Socket; 
  3.  
  4. //客户端发出信息,服务端收到信息 
  5. public class Cilent { 
  6.     public static void main(String[] args) throws Exception { 
  7.         Socket socket=new Socket("127.0.0.1",8888); 
  8.         OutputStream outputStream=socket.getOutputStream();//对于客户端是输出,而对于服务端是输入 
  9.         String str="Hello World!"//客户端写入服务端的内容 
  10.         outputStream.write(str.getBytes()); 
  11.         System.out.println("客户端启动"); 
  12.         outputStream.close(); 
  13.         socket.close();//关闭资源 
  14.     } 

先运行代码1-1,在运行代码1-2,在控制台打印如下信息:

上述客户端与服务端的通信,输入是客户端的一个字符串,那么根据 一个简单的文件读写、复制的例子一个简单的缓冲流读写的例子 的学习,可以利用Socket通信来实现文件的操作,即将文件的内容复制到另外一个文件中。

  • 1-3 Socket通信实现文件的复制之服务端代码
 
  
  1. import java.io.FileOutputStream; 
  2. import java.io.InputStream; 
  3. import java.net.ServerSocket; 
  4. import java.net.Socket; 
  5.  
  6. //文件的复制 
  7. public class Server1 { 
  8.     public static void main(String[] args) throws Exception { 
  9.         ServerSocket ss=new ServerSocket(8888);  
  10.         Socket s=ss.accept(); 
  11.         InputStream is=s.getInputStream(); // 连接本机端口 
  12.         //System.out.println("服务端启动成功!"); 
  13.         FileOutputStream fos=new FileOutputStream("e:\\b.txt"); //把要复制的文件内容复制到指定位置 
  14.          
  15.         byte[] buff=new byte[1024]; //缓冲流  //制到哪一个文件夹 
  16.         int len; 
  17.         while((len=is.read(buff))!=-1){ 
  18.             fos.write(buff, 0, len); 
  19.         } 
  20.          
  21.         fos.close(); 
  22.         is.close(); 
  23.          
  24.         System.out.println("服务端启动成功!"); 
  25.     } 
1-4 Socket通信实现文件的复制之客户端代码
 
  
  1. import java.io.FileInputStream; 
  2. import java.io.OutputStream; 
  3. import java.net.Socket; 
  4. //实现同一台机子的不同磁盘的文件的复制,也可以实现不同机子连接的文件的复制,一台先启动服务端监听 
  5. //令外一台发送请求,成功连接后进行文件的复制 
  6. public class Cilent1 { 
  7.     public static void main(String[] args) throws Exception { 
  8.         Socket s=new Socket("127.0.0.1",8888);    
  9.         OutputStream out=s.getOutputStream();  
  10.         //要复制的内容所在的路径,注意:文件一定要是存在的。 
  11.         FileInputStream  fis=new FileInputStream("e:\\a.txt"); 
  12.         System.out.println("客户端启动成功!"); 
  13.          
  14.         byte[] buff=new byte[1024];  //缓冲流读入内存 
  15.         int len; 
  16.         while((len=fis.read(buff))!=-1){ 
  17.             out.write(buff, 0, len); 
  18.         } 
  19.         System.out.println("文件内容已复制到指定的文件夹!"); 
  20.         fis.close(); 
  21.         s.close(); 
  22.     } 

先运行代码1-3,在运行代码1-4,运行前e盘根目录不存在b.txt,a.txt文本文件的内容是:

运行后,在e盘根目录产生b.txt文本文件,文件的内容与a.txt相同(复制的内容),如图:

同时控制台打印如下信息:

从以上的代码可以看出,输入的可以是指定的字符串,也可以是文件内容,当然可以是输入设备输入的内容,可以看出他们的操作基本相同。