Java实现简单Socket单次通信(一对一)

Socket可以实现不同主机之间的通信,而且现在的网络环境中非常常见。
简单来讲Socket就是对TCP/IP的封装,然后提供API,让编程人员不用管底层的网络协议如何运作。

下面的代码实现了简单的两个程序之间的Socket通信

  • 服务端SocketServer(被动等待接收消息并回复消息的一端):
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * Socket服务端
 **/
public class SocketServer {
    
    public static void main(String[] args) {
        doServer();
    }

    /**
     * 建立服务端并监听客户端的输入
     */
    private static void doServer() {
        try {
            // 建立监听端口为2023的服务端Socket服务
            ServerSocket ss = new ServerSocket(2023);
            System.out.println("服务端Socket服务已建立,等待客户端连接...");
            // 通过ss.accept()开始持续监听2023端口,当有连接时获取收到的包装成Socket的客户端对象
            Socket s = ss.accept();
            // 获取客户端的IP地址和端口号
            String ip = s.getInetAddress().getHostAddress();
            int port = s.getPort();
            System.out.println("服务端与 " + ip + ":" + port + " 已建立连接");
            // 接收客户端的通信消息(用输入流接收客户端的输出流)
            InputStream ins = s.getInputStream();
            byte[] bytes = new byte[1024];
            int len = ins.read(bytes);
            // 将二进制转成字符串
            String msg = new String(bytes, 0, len);
            System.out.println("客户端消息:" + msg);
            // 用输出流返回消息
            OutputStream os = s.getOutputStream();
            os.write("Hello!".getBytes());
            // 释放资源
            s.close();
            ss.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • 客户端SocketClient(主动发出消息并接收回复消息的一端):
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/**
 * Socket客户端
 **/
public class SocketClient {

    public static void main(String[] args) {
        doClient();
    }

    /**
     * 与服务端通信
     */
    private static void doClient(){
        try {
            // 与ip为127.0.0.1、端口为2023的服务端建立连接
            Socket s = new Socket("127.0.0.1", 2023);
            // 创建通信输出流
            OutputStream os = s.getOutputStream();
            // 向输出流中写入二进制字节流以传输消息
            os.write("Hello Socket!".getBytes());
            // 用输入流获取服务端的回复消息
            InputStream ins = s.getInputStream();
            byte[] bytes = new byte[1024];
            int len = ins.read(bytes);
            String msg = new String(bytes, 0, len);
            System.out.println("服务端的返回:" + msg);
            // 释放资源
            s.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

先运行服务端,再运行客户端,运行结果如下

  • 服务端:
    在这里插入图片描述
  • 客户端:
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值