1.Socket和ServerSocket入门实例,实现单聊

Socket定义:

套接字(Socket)是一个抽象层,应用程序可以通过它发送或接受数据,可对其进行像文件一样的打开,读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址和端口的组合。可以理解为两台机器或进程间进行网络通信的端点,这个端点包括IP地址和端口号。
Socket和ServerSocket的区别就像其名字一样,简单的说ServerSocket作用在服务端,用以监听客户端的请求。Socket作用在客户端和服务端,用以发送和接受消息。就像上边所说的,它们都哟啊包含一个Ip地址和端口号

IO

简单说一下IO,IO常见的应用场景就是网络通信和读取文件等方面。IO分为字节流和字符流。字节既Byte,包含八位二进制数,一个二进制数就是1bit,中文名叫位。字符既一个字母或者一个汉字,一个字母由一个字节组成。而汉字根据编码的不同由2个或者3个组成。Java.io包如下
在这里插入图片描述
在这里插入图片描述

实战

1.首先创建两个类 Server和Client

Server.class

package com.yjn.learn;

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

/**
 * @Author yjn
 * @Date 2021/10/12 2:02 下午
 */
public class Server {
    public static void main(String[] args) {
        //定义默认的监听端口
        final int DEFAULT_PORT=8888;
        try {
            //创建ServerSocket监听8888端口
            ServerSocket serverSocket=new ServerSocket(DEFAULT_PORT);
            System.out.println("Server Socket Start... The Prot is "+DEFAULT_PORT);
            while (true){
                //一直监听改端口号
                //阻塞式监听,如果没有客户端请求就一直停留在这里
                Socket socket = serverSocket.accept();
                System.out.println("Client["+socket.getInetAddress()+"] Online");
                //接受消息
                BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                //发送消息
                BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                String msg;
                while ((msg=reader.readLine())!=null){
                    System.out.println("Client ["+socket.getInetAddress()+msg);
                    //服务端要发送的消息
                    writer.write("Server"+msg+"\n");
                    writer.flush();
                    if("quit".equals(msg)){
                        System.out.println("Client ["+socket.getInetAddress()+"Offline");
                        break;
                    }
                }
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

Client.class

package com.yjn.learn;

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

/**
 * @Author yjn
 * @Date 2021/10/12 2:03 下午
 */
public class Client {

    //客服端程序
    public static void main(String[] args) {
        //定义ip和端口号
        final String DEFAULT_SERVER_HOST = "127.0.0.1";
        final int DEFAULT_SERVER_PORT = 8888;
        try {
            //创建socket
            Socket socket = new Socket(DEFAULT_SERVER_HOST, DEFAULT_SERVER_PORT);
            //接受消息 从socket里获取一个连接
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //发送消息
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            //获取用户输入的消息
            BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
            String msg;
            //循环输入
            while (true) {
                String inputMessage = input.readLine();
                writer.write(inputMessage + "\n");
                writer.flush();
                msg = reader.readLine();
                System.out.println(msg);
                if ("quit".equals(inputMessage)){
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2.然后运行两个类 打开终端

Client
Server

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值