Socket通信
Posted 一念花开满天下
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Socket通信相关的知识,希望对你有一定的参考价值。
首先创建Socket通信服务器,用于监听客户端的请求
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; //import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import org.apache.log4j.Logger; public class TheService{ //日志输出 private static Logger log=Logger.getLogger(TheService.class); /** * @param args * @throws IOException */ public static void main(String[] args){ // TODO Auto-generated method stub ServerSocket serverSocket =null; Socket socket =null; BufferedReader br = null; PrintWriter pw = null; String receive =null; String lineTxt = null; log.error("系统开始监听之前"); System.out.println("系统开始监听之前"); try { //发布服务器监听端口号 serverSocket=new ServerSocket(6666); //启用监听器用于监听客户端的请求 socket=serverSocket.accept(); System.out.println("系统开始监听"); //用于接收客户端传递数据 br=new BufferedReader(new InputStreamReader(socket.getInputStream())); System.out.println("接收客户端传递数据"); //用于接收客户端数据之后向客户端返回数据 pw=new PrintWriter(socket.getOutputStream()); log.error("开始接受客户端传递数据"); //接收数据之后开始读取发送过来的数据 while(true){ receive=br.readLine(); System.out.println("接收客户端传送数据为:"+receive); break; } log.error("正在通过接受的路径查看数据"); //我这边是传递的一个本地绝对路径,认识你后根据绝对路径来读取该路径下的文件内容 File file=new File(receive); //判断指定路径下文件是否存在以及是否是文件 if(file.isFile()&&file.exists()){ //如果是文件就开始读取指定文件 InputStreamReader read = new InputStreamReader( new FileInputStream(file)); BufferedReader bufferedReader = new BufferedReader(read); log.error("已找到文件正在读取文件"); while((lineTxt = bufferedReader.readLine()) != null){ System.out.println(lineTxt); //将读取到的文件反馈给客户端 pw.println(lineTxt); pw.flush(); } read.close(); }else{ log.error("没有找到指定路径的文件"); System.out.println("找不到指定的文件"); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try{ //关闭输入输出流以及socket br.close(); pw.close(); socket.close(); serverSocket.close(); }catch(Exception e2){ } } } }
创建完服务器端之后,就需要创建与之通信的客户端程序
/** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Socket socket =null; BufferedReader br =null; PrintWriter pw=null; try { //与客户端进行连接,这里的两个参数分别是服务器端的IP地址,以及服务器发时候给出的监听端口号 socket=new Socket("127.0.0.1",6666); System.out.println("服务器连接成功"); String path="C:/Users/lenovo/Desktop/新建文本文档.txt"; //用于接收服务器返回的数据 br=new BufferedReader(new InputStreamReader(socket.getInputStream())); //用于向服务器传递数据 pw=new PrintWriter(socket.getOutputStream()); //此处直接将绝对路径传递给服务器端 pw.println(path); pw.flush(); //此处随时读取服务器端返回的数据 while(true){ //String receive=br.readLine(); String receive=br.readLine(); System.out.println(receive); if(receive==null){ System.out.println("接收返回数据完成"); break; } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try{ pw.close(); br.close(); socket.close(); }catch(IOException e){ } } }
以上是关于Socket通信的主要内容,如果未能解决你的问题,请参考以下文章