首页 > 其他分享 >tcp多个客户端访问服务端,运用多线程

tcp多个客户端访问服务端,运用多线程

时间:2024-08-20 20:37:43浏览次数:6  
标签:java Socket System tcp new import 多线程 服务端 客户端

客户端

package com.shujia.day20.tcpdemo3;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

/*
    1:建立客户端的Socket服务,并明确要连接的服务器。
    2:如果连接建立成功,就表明,已经建立了数据传输的通道.就可以在该通道通过IO进行数据的读取和写入.该通道称为Socket流,Socket流中既有读取流,也有写入流.
    3:通过Socket对象的方法,可以获取这两个流
    4:通过流的对象可以对数据进行传输
    5:如果传输数据完毕,关闭资源

 */
public class ClientDemo1 {
    public static void main(String[] args) throws Exception {
        //Socket(String host, int port)
        //创建流套接字并将其连接到指定主机上的指定端口号。
        //创建客户端的Socket对象
        Socket s = new Socket("192.168.28.254", 12345);
        System.out.println("============= 欢迎进入数加31期聊天室 ==================");
        Scanner sc = new Scanner(System.in);
        while (true){
            System.out.print("输入要发送的内容:");
            String info = sc.next();
            if("over".equals(info)){
                break;
            }

            //通过Socket对象获取通道中的输出流, 本质上就是字节输出流
            OutputStream os = s.getOutputStream();
            os.write(info.getBytes());


            //获取通道中的输入流,用于接收服务端的反馈
            InputStream inputStream = s.getInputStream();
            byte[] bytes = new byte[2048];
            int length = inputStream.read(bytes);
            String info2 = new String(bytes, 0, length);
            System.out.println(info2);
        }



        s.close();

    }
}

服务端

package com.shujia.day20.tcpdemo3;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
    1:建立服务器端的socket服务,需要一个端口
    2:服务端没有直接流的操作,而是通过accept方法获取客户端对象,在通过获取到的客户端对象的流和客户端进行通信
    3:通过客户端的获取流对象的方法,读取数据或者写入数据
    4:如果服务完成,需要关闭客户端,然后关闭服务器,但是,一般会关闭客户端,不会关闭服务器,因为服务端是一直提供服务的

 */
public class ServerDemo1 {
    public static void main(String[] args) throws Exception {
        //创建服务端的Socket对象
        //ServerSocket(int port)
        //创建绑定到指定端口的服务器套接字。
        ServerSocket ss = new ServerSocket(12345);

        while (true){
            //调用服务器的ServerSocket的方法,监听客户端的连接,底层建立传输通道
            Socket socket = ss.accept(); // 发生阻塞,等待客户端的连接

            new ClientThread(socket).start();
        }

    }
}

class ClientThread extends  Thread{
    private Socket socket;

    public ClientThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        InetAddress inetAddress = socket.getInetAddress();
        String hostName = inetAddress.getHostName();
        String ip = inetAddress.getHostAddress();

        System.out.println("主机名:"+hostName+" 已上线!!》》》》》》》》》》》》》》》》》》");
        try {
            while (true) {
                //获取通道中的输入流对象
                InputStream is = socket.getInputStream();
                byte[] bytes = new byte[2048];
                int length = is.read(bytes);
                String info = new String(bytes, 0, length);
                System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
                System.out.println(hostName+": "+info);

                //获取通道输出流,给客户端一个反馈信息
                OutputStream outputStream = socket.getOutputStream();
                outputStream.write("服务器已收到!".getBytes());
            }
        }catch (Exception e){
//            e.printStackTrace();
            System.out.println("************************");
            System.out.println(hostName+ "客户端已断开连接.....");
            System.out.println("************************");
        }
    }
}

标签:java,Socket,System,tcp,new,import,多线程,服务端,客户端
From: https://www.cnblogs.com/qiwei-bigdata/p/18370286

相关文章

  • tcp协议
    客户端packagecom.shujia.day20.tcpdemo2;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.Socket;importjava.util.Scanner;/*1:建立客户端的Socket服务,并明确要连接的服务器。2:如果连接建立成功,就表明,已经建立了数据传输的通......
  • 深入理解TCP选择性确认(SACK):优化网络传输的机制
    摘要TCP(传输控制协议)是互联网上使用最广泛的协议之一,用于在不可靠的网络环境中提供可靠的数据传输服务。然而,在某些情况下,如网络拥塞或丢包,TCP的默认重传机制可能会导致不必要的性能下降。为了解决这个问题,TCP引入了选择性确认(SACK)机制。本文将详细介绍SACK的概念、工作原......
  • TCP 通信-Qt-思维导图-学习笔记
    TCP通信TCP简介TCP协议概述全称:TransmissionControlProtocol(传输控制协议)特性:面向连接、可靠、基于字节流的传输层通信协议TCP通信流程建立连接:TCP通信必须先建立连接通信端:分为客户端和服务端服务端操作监听端口:服务端监听某个端口,等待客户端连接......
  • 学懂C++(三十九):网络编程——深入详解 TCP 和 UDP 的区别和应用场景
    目录一、TCP的特点及应用场景1.可靠性2.流控制和拥塞控制3.有序传输4.应用场景二、UDP的特点及应用场景1.无连接2.不可靠性3.轻量级4.支持广播和多播5.应用场景三、TCP和UDP的区别四、TCP和UDP的工作原理1.TCP的工作原理三次握手数据传输......
  • 面试必备之TCP知识
    概述关于TCP的杂乱知识点,不成体系,毕竟TCP真的太复杂。TCP,TransmissionControlProtocol;IP,InternetProtocol,两者共同组成TCP/IP协议族,包含一系列构成互联网基础的网络协议。OSI七层网络模型图片来自于OSI七层网络模型OSI七层由于太过严格,所以并没有应用在计算机中,其衍生的T......
  • 多线程基础知识(一)
    多线程多线程​ 进程:正在运行的程序,是系统进行资源分配和调用对的独立单位,每一个进程都有它的内存空间和系统资源。可以理解为,一个正在运行的程序。​ 线程:是进程中的单个顺序控制流,是一条执行路径,一个进程如果只有一条执行路径,则称为单线程程序;一个进程如果有多条执行路径,则称......
  • TCPIP路由技术第一卷第八章OSPF 第六部分-1虚链路
    tcp/ip_ospf案例研究6虚链路/认证/ABRfiltering1.area1virtual-link33.1.1.1(rid)2.gretunnel(ip封装ip的技术)inttunnel0ipadd113.1.1.1255.255.255.0ipospf110area0tunnelsourcelo0tunneldestination33.1.1.13.认证有很多种组合,值需要记住本资粮链......
  • TCPIP路由技术第一卷第八章OSPF 第五部分-2 Forward address
    tcp/ip_ospf案例研究5forwardaddressforwardaddress:intheautonomoussystem'sinteriortofunctionas"routeserver"initsas-external-lsas,packetsshouldberouteddirectly通告0.0.0.0非0的情况nssa区域:转发地址为asbr上最大的环回口非nssa:直接为下一跳地......
  • TCPIP路由技术第一卷第八章OSPF 第五部分-1 特殊区域
    tcp/ip_ospf案例研究4特殊区域1.stub区域:区域内所有设备areaidstub:abr会通告一条oia(默认cost1)的默认路由,存在3类lsa不存在4,5类lsa2.totallystub区域:abr配置no-summary,其他设备配置areaidstub;abr会通告一条oia的默认路由;不存在3,4,5类lsa3.nssa区域:区域内所有......
  • TCPIP路由技术第一卷 第三大部分-2 重分步的定义及实验
    tcp/ip路由控制案例研究1单向重分布和双向重分布1.什么是充分:从一个协议(或者进程域)学习到的路由(以及运行该协议的直连接口)重分布到另一个协议的数据库中2.度量值,重分布时需要制定度量值让多种协议可以理解原来的度量值(seedmetric)3.ad(管理距离),从多个协议学习到同一......