Socket实例了解与学习

看实例的小伙伴肯定已经看过原理了在这我就不过多的废话了直接上例子吧

package Socket;

import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
    /**
          * Socket客户端
           */
     public static void main(String[] args) {
                 try {
                         //创建Socket对象
                         Socket socket=new Socket("localhost",1234);

                         //根据输入输出流和服务端连接
                         OutputStream outputStream=socket.getOutputStream();//获取一个输出流,向服务端发送信息
                         PrintWriter printWriter=new PrintWriter(outputStream);//将输出流包装成打印流
                         printWriter.print("服务端你好,我是zzj");
                         printWriter.flush();
                         socket.shutdownOutput();//关闭输出流

                         InputStream inputStream=socket.getInputStream();//获取一个输入流,接收服务端的信息
                         InputStreamReader inputStreamReader=new InputStreamReader(inputStream);//包装成字符流,提高效率
                         BufferedReader bufferedReader=new BufferedReader(inputStreamReader);//缓冲区
                         String info="";
                         String temp=null;//临时变量
                         while((temp=bufferedReader.readLine())!=null){
                                 info+=temp;
                                 System.out.println("客户端接收服务端发送信息:"+info);
                             }

                         //关闭相对应的资源
                         bufferedReader.close();
                         inputStream.close();
                         printWriter.close();
                         outputStream.close();
                         socket.close();
                     } catch (UnknownHostException e) {
                         e.printStackTrace();
                     } catch (IOException e) {
                         e.printStackTrace();
                  }

     }
}
package Socket;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    public static void main(String[] args) {
        {
            try {
                ServerSocket serverSocket = new ServerSocket(1234);
                System.out.println("服务段已启动,等待客户端连接");
                //侦听并接受并接受此套接字的返回,创建一个socket对象
                Socket socket = serverSocket.accept();

                //根据输入出流和客户端连接,
                //得到一个输入流
                InputStream inputStream = socket.getInputStream();
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
                //加入缓冲区
                BufferedReader bufferedInputStream = new BufferedReader(inputStreamReader);
                String temp = null;
                String info = "";
                while ((temp = bufferedInputStream.readLine()) != null) {
                    info += temp;
                    System.out.println("已经接收到客户端的连接");
                    System.out.println("服务器接受到客户端信息" + info + "当前客户的ip" + socket.getInetAddress().getHostAddress());
                }
                //获得一个输出流,向服务器发送消息
                OutputStream outputStream = socket.getOutputStream();
                //讲输出流包装成打印流
                PrintWriter printWriter = new PrintWriter(outputStream);
                printWriter.print("你好,服务端已经收到您的信息");
                printWriter.flush();
                socket.shutdownOutput();//关闭输出流
                //关闭相对应的资源
                printWriter.close();
                outputStream.close();
                bufferedInputStream.close();
                inputStream.close();
                socket.close();


            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

这个例子时一个客户端一个服务端正常的情况下不可能只有一个来进行通信

接下来用多线程来进行写多个socket通信

package SocketThread;

import java.io.*;
import java.net.Socket;

public class SocketThread implements Runnable {
    private Socket socket;

    public SocketThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        try {
            InputStream inputStream = socket.getInputStream();
            // 得到一个输入流,接收客户端传递的信息
            InputStreamReader inputStreamReader = new InputStreamReader(
                    inputStream);// 提高效率,将自己字节流转为字符流
            BufferedReader bufferedReader = new BufferedReader(
                    inputStreamReader);// 加入缓冲区
            String temp = null;
            String info = "";
            while ((temp = bufferedReader.readLine()) != null) {
                info += temp;
                System.out.println("已接收到客户端连接");
                System.out.println("服务端接收到客户端信息:" + info + ",当前客户端ip为:"
                        + socket.getInetAddress().getHostAddress());
            }

            OutputStream outputStream = socket.getOutputStream();// 获取一个输出流,向服务端发送信息
            PrintWriter printWriter = new PrintWriter(outputStream);// 将输出流包装成打印流
            printWriter.print("你好,服务端已接收到您的信息");
            printWriter.flush();
            socket.shutdownOutput();// 关闭输出流

            // 关闭相对应的资源
            bufferedReader.close();
            inputStream.close();
            printWriter.close();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


}
package SocketThread;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    /**
     * Socket服务端
     */
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(1234);
            System.out.println("服务端已启动,等待客户端连接..");

            while (true) {
                Socket socket = serverSocket.accept();// 侦听并接受到此套接字的连接,返回一个Socket对象
                SocketThread socketThread = new SocketThread(socket);
               new Thread(socketThread).start();

            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
package SocketThread;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;


public class Client {
    public void client(int i){
        try {
            //创建Socket对象
            Socket socket=new Socket("localhost",1234);
            //根据输入输出流和服务端连接
            OutputStream outputStream=socket.getOutputStream();//获取一个输出流,向服务端发送信息
            PrintWriter printWriter=new PrintWriter(outputStream);//将输出流包装成打印流
            printWriter.print("服务端你好,我是客户"+i);
            printWriter.flush();
            socket.shutdownOutput();//关闭输出流

            InputStream inputStream=socket.getInputStream();//获取一个输入流,接收服务端的信息
            InputStreamReader inputStreamReader=new InputStreamReader(inputStream);//包装成字符流,提高效率
            BufferedReader bufferedReader=new BufferedReader(inputStreamReader);//缓冲区
            String info="";
            String temp=null;//临时变量
            while((temp=bufferedReader.readLine())!=null){
                info+=temp;
                System.out.println("客户端接收服务端发送信息:"+info);
            }

            //关闭相对应的资源
            bufferedReader.close();
            inputStream.close();
            printWriter.close();
            outputStream.close();
            socket.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * Socket客户端
     */
    public static void main(String[] args) {
        Client c=new Client();
        for (int i=0;i<=10;i++)
            c.client(i);

    }

}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值