socket编程(java)

socket编程(java)

简介

​ Socket(套接字)是计算机网络编程中用于实现网络通信的一种机制。它提供了一种编程接口,允许应用程序通过网络进行数据传输,实现不同主机之间的通信。

​ Socket可以看作是一种抽象的概念,用于描述网络通信的端点。它包含了通信所需的各种参数和状态信息,以便应用程序能够通过它进行数据的发送和接收。

TCP/IP协议

​ 要理解socket必须的得理解tcp/ip,它们之间好比送信的线路和驿站的作用,比如要建议送信驿站,必须得了解送信的各个细节。

TCP/IP协议不同于iso的7个分层**(层层封装,层层解封。越往下层,封装的越多)**,它是根据这7个分层,将其重新划分,好比打扫卫生,本来有扫帚,垃圾斗,抹布,涂料,盆栽等就好比OSI的标准几个分层,tcp/ip根据用途和功能,将扫帚,垃圾斗放到粗略整理层,抹布涂料放到中度整理层,盆栽放到最终效果层。这里TCP/IP也对OSI的网络模型层进行了划分:大致如下:

image-20241010205656826

TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中

应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等

传输层:TCP,UDP

网络层:IP,ICMP,OSPF,EIGRP,IGMP

数据链路层:SLIP,CSLIP,PPP,MTU

tcp连接

服务端

/**
 * 服务端--tcp
 * @Author zh
 */
public class Server {
    public final static String  host = "127.0.0.1";
    public final static int port = 22222;
    public static void main(String[] args) {

        try {
            ServerSocket server = new ServerSocket(port);
            System.out.println("服务端等待连接中。。。。。。");
            //获取客户端链接
            Socket accept = server.accept();
            //链接到客户端
            System.out.println("获取到客户端连接,ip地址为:"+accept.getRemoteSocketAddress());
            // 输出流
            PrintWriter out = new PrintWriter(accept.getOutputStream(),true);
            //网络输入流
            BufferedReader in = new BufferedReader(new InputStreamReader(accept.getInputStream()));
            String message;
            while(true){
                message = in.readLine();
                if(message.equalsIgnoreCase("exit")){
                    break;
                }
                System.out.println("客户端消息:"+message);
                //给客户端响应
                out.println(new Date()+"---服务端收到您的信息,信息为:"+message);
            }
            //关闭连接
            accept.close();
            server.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

客户端

/**
 * 客户端--tcp
 * @Author zh
 */
public class Client {
    public static void main(String[] args) {
        //创建连接
        try {
            Socket  socket = new Socket(Server.host, Server.port);
            System.out.println("连接到---"+Server.host+":"+Server.port);
            //获取网络输入流和输出流
            PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //获取控制台输入
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            String message;
            while(true){
                System.out.println("输入消息(输入exit退出):");
                message = reader.readLine();
                if(message.equalsIgnoreCase("exit")){
                    break;
                }
                out.println(message);
                String response = in.readLine();
                System.out.println("服务端的响应:"+response);
            }
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

结果

服务端

image-20241010204025544

客户端

image-20241010204100417

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值