Socket通信原理(多线程)

本文详细介绍了TCP/IP协议下的Socket通信流程,包括客户端和服务端的实现步骤。通过示例代码展示了如何创建ServerSocket和Socket对象,进行数据的发送与接收。在多客户端连接场景下,提出了采用多线程服务端线程处理类的方法,确保每个客户端连接都能被独立处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在日常上网时,会经常登录某个网址,发送我们的请求信息,然后从该网站得到我们想要的信息。这个是怎么实现的呢。其实,我们可以把我们自己当成客户端,网站当成服务端。其实这是个相对的概念,就是谁收到请求,谁就是服务端;谁发送请求,谁就是客户端。而发送和接收请求都是基于Socket 对象实现的。而这个过程是怎么样的呢?(这里介绍的是基于TCP/IP 的通信)
下面我先用一个简单的图解表示一下:
在这里插入图片描述
通过上面的图解,我们可以很清晰的看到整个通信的流程。
对于编码来实现的话,我们首先需要编写服务端,然后再编写客户端。

服务端的实现思路:

  1. 首先创建ServerSocket类的对象,并定义端口
  2. 然后利用该对象的accept() 的方法,来等待接收请求,注意这里是阻塞的状态。
  3. 如果接收到请求,就会相应的创建Socket类的对象
  4. 首先我们可以向客户端发送消息,“我们收到了你的请求!”,利用Socket对象的输出流。
  5. 我们利用Scoket对象获取输入流,接收客户端发送的信息。
  6. 关闭相关资源

客户端的实现思路:

  1. 创建客户端的Socket对象,并指定想要连接的服务端的IP地址和端口号
  2. 获取Socket对象的输入流,接收服务端发送的消息
  3. 获取Socket对象的输出流,向服务端发送指定的内容
  4. 关闭相关资源

几个需要知道的概念:

  • IP地址:为实现网络中不同计算机之间的通信,每台机器必须有一个唯一的标识–IP地址
    常见格式:192.168.25.130,本机地址一般为127.0.0.1或者“localhost”
  • 端口号:为了区分不同应用的程序,范围为0~65535, 其中 0-1023 为系统保留,我们要定义最好大于1023.
  • 传输的数据单位:输入和输出流的传输的最小单位是字节,8个bit。
  • TCP:Transmission Control Protocol 传输控制协议
  • IP:Internet Protocol 互联网协议

具体的代码实现:
首先是服务端:

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

/**
 * @author:Xiao
 * @Date:2021/5/31
 **/
public class Server {
   

    public static void main(String[] args) {
   

        try {
   
            //1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
            ServerSocket serverSocket = new ServerSocket(8888);
            System.out.println("***服务器即将启动,等待客户端的连接***");
            //2.调用accept()方法开始监听,等待客户端的连接
            Socket socket=serverSocket.accept();
            System.out.println("连接一台客户机");

            //3.获取输入流,并读取客户端信息
            InputStream is = socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            // 使用字符缓冲流
            BufferedReader br = new BufferedReader(isr);
            String info=null;
            while((info=br.readLine())!=null){
   //循环读取客户端的信息。一行一行的读取
                System.out.println("我是服务器,客户端说:"+info);
            }
            socket.shutdownInput();//关闭输入流

            //4.获取输出流&
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

肖大仙~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值