Java简易网络通信v1

在实现网络通信前,要先要了解socket

在Java中,Socket是一种网络通信的基本组件,用于建立网络连接和进行数据传输。Socket实现了网络中两个应用程序之间的通信,它是一个端点,包含了一个IP地址和一个端口号,可以通过Socket连接到网络中的其他Socket端点。

在Java中,Socket被实现为两个类:ServerSocket和Socket。ServerSocket类用于创建服务器端的Socket,监听指定的端口并等待客户端连接。一旦客户端连接到服务器端的Socket,服务器端将为该连接创建一个新的Socket对象,并通过这个Socket与客户端进行通信。

而客户端使用Socket类来连接服务器端的Socket,并进行数据传输。当客户端连接到服务器端的Socket后,客户端就可以使用Socket对象的输入和输出流来发送和接收数据。

Java的Socket类提供了一些方法,例如accept()、getInputStream()、getOutputStream()等,用于建立连接、接收和发送数据等操作。Socket类还支持多线程编程,可以通过多线程来实现同时处理多个连接的需求。

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

public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(58888);
            //绑定端口,使服务器与特定端口绑定,建议50000以上
            System.out.println("ServerSocket初始化完成"+serverSocket.getInetAddress()+"");
            //getInetAddress方法获取主机ip地址

            // 监听socket,当有socket连接,创建socket对象接收或发送数据
            Socket socket = serverSocket.accept();
            System.out.println("监听到连接的ip地址:"+socket.getInetAddress());
            //打印出连接的地址
            System.out.println("监听到连接的端口"+socket.getPort());
            //打印出连接的端口

            //服务端发送数据,创建输出流
            OutputStream outputStream = socket.getOutputStream();

            //发送数字6303003
            //由于只能发送byte类型,所以要将int类型转换成byte,String类型转换成byte
            System.out.println("发送66303003");
            int num = 66303003;
            int b1 = (num >> 24) & 0xFF;
            int b2 = (num >> 16) & 0xFF;
            int b3 = (num >> 8) & 0xFF;
            int b4 = (num >> 0) & 0xFF;
            outputStream.write (b1);
            outputStream.write (b2);
            outputStream.write (b3);
            outputStream.write (b4);
            System.out.println("发送"+b1+" "+b2+" "+b3+" "+b4);

            System.out.println("发送你好");
            String msg = "你好";
            for(int i = 0; i < msg.length (); i++){
                char c = msg.charAt (i);
                int c1 = (c >> 8) & 0xFF;
                int c2 = (c >> 0) & 0xFF;
                outputStream.write (c1);
                outputStream.write (c2);
            }

            outputStream.flush();
            //强制输出输出流

            //关闭进程
            outputStream.close();
            socket.close();


        } catch (IOException e) {
            throw new RuntimeException(e);
        }

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

public class Client {
    public static void main(String[] args) {
        try {
            //创建客户端ip地址,端口号
            Socket socket = new Socket("127.0.0.1",58888);
            System.out.println("客户端连接IP:"+socket.getLocalAddress()+"本地端口"+socket.getLocalPort());
            System.out.println("连接的服务端IP:"+socket.getInetAddress()+"对方端口"+socket.getPort());

            InputStream inputStream = socket.getInputStream();
            int b1 = inputStream.read ();
            int b2 = inputStream.read ();
            int b3 = inputStream.read ();
            int b4 = inputStream.read ();
            int msg = b1 << 24 | b2 << 16 | b3 << 8 | b4;
            System.out.println(msg);

            for(int i = 0; i < 4; i++){
                int c1 = inputStream.read ();
                int c2 = inputStream.read ();
                int c = c1 << 8 | c2;
                System.out.print ((char) c);
            }

        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nothing8727

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值