Socket java 介绍及案例

本文介绍了Socket的概念,它是网络通信中进程间通信的端点抽象,简化了TCP/IP协议族的使用。文章通过实例展示了如何创建服务器端和客户端,包括建立连接、读写操作以及关闭资源的步骤。服务端通过ServerSocket监听客户端连接,客户端则通过Socket对象与服务器建立连接并发送数据。示例代码详细展示了服务端和客户端的Java实现。
摘要由CSDN通过智能技术生成

介绍

所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面。一个Socket由一个IP地址和一个端口号唯一确定。

应用场景

Socket通常用来实现客户方和服务方的连接,比如聊天通信功能。

Socket通信案例

步骤分析

服务端

1、创建ServerSocket和Socket

2、打开连接到的Socket的输入/输出流

3、按照协议对Socket进行读/写操作

4、关闭输入输出流,以及Socket

客户端

1、创建Socket对象,指明需要链接的服务器的地址和端号

2、链接建立后,通过输出流向服务器发送请求信息

3、通过输出流获取服务器响应的信息

4、关闭相关资源

代码简单实现案例


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

/**
 * 只接受服务器
 *
 * @author zengLingYao
 * @date 2021/12/09
 */
public class OnlyAcceptServer {

    public static void main(String[] args) {

        ServerSocket serverSocket = null;
        Socket socket = null;
        InputStream inputStream = null;
        try {
            serverSocket = new ServerSocket(8008);
            System.out.println("服务端启动成功,等待客户端连接......");
                //调用accept阻塞,等待客户端连接
                socket = serverSocket.accept();
                System.out.println(socket.getRemoteSocketAddress()+"客户机已上线");
                inputStream = socket.getInputStream();
                byte[] buffer = new byte[1024];
                int len = 0;
                //读取客户端的数据,read()阻塞
                while ((len = inputStream.read(buffer)) > 0) {
                    String magess = new String(buffer, 0, len);
                    System.out.println(magess);
                }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                System.out.println("客户端关闭,服务即将关闭");
                inputStream.close();
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
}


import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

/**
 * 只发送客户端
 *
 * @author zengLingYao
 * @date 2021/12/09
 */
public class OnlySendClient {

    public static void main(String[] args) {
        //创建一个流套接字并将其连接到指定主机上的指定端口号。
        Socket socket = null;
        OutputStream outputStream = null;
        try {
            socket = new Socket("127.0.0.1", 8008);

        //返回此套接字的输出流。
        outputStream = socket.getOutputStream();

        System.out.println("连接成功,请输入发送内容:");
        while(socket != null){
            //控制台中读取信息
            String nextLine = new Scanner(System.in).nextLine();
            if ("exit".equals(nextLine)){
                outputStream.close();
                socket.close();
                break;
            }
            byte[] magess = nextLine.getBytes();
            outputStream.write(magess);
            //刷新缓冲区
            outputStream.flush();
            System.out.println("发送成功");
        }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值