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客户端

 

以上是关于Socket通信的主要内容,如果未能解决你的问题,请参考以下文章

socket通信

与另一个片段通信的片段接口

Python 之 Socket编程(TCP/UDP)

C#:Socket通信

Socket通信客户端和服务端代码

socket网络编程:在简单套接字基础上加上通信循环(代码完善)