TCP实现服务器与单客户端连接(多线程)

2023-05-16

局域网内实现单客户端与服务器通信

客户端通过配置ip和端口号来连接服务器

客户端和服务器端各自具有发送和接收线程,可以实现一方持续发送

服务器端

package Net;

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

public class Server2 {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket=new ServerSocket(9999);
        System.out.println("服务器已启动等待连接");
        Socket socket=serverSocket.accept();
        System.out.println("连接成功");
        In in=new In(socket,"张三");
        Out out=new Out(socket);
        in.start();
        out.start();
    }
}

客户端

package Net;

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

public class Client2 {
    public static void main(String[] args) throws IOException {
        Socket socket=new Socket("127.0.0.1",9999);
        if(socket.isConnected()){
            System.out.println("连接成功");
        }
        In in=new In(socket,"张修");
        Out out=new Out(socket);
        in.start();
        out.start();
    }
}

输入线程

package Net;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class In extends Thread{
    Socket socket;
    String name;
    public In(Socket socket){
        this.socket=socket;
    }
    public In(Socket socket,String name){
        this.socket=socket;
        this.name=name;
    }
    @Override
    public void run() {
        InputStream inputStream= null;
        try {
            inputStream = socket.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        DataInputStream din=new DataInputStream(inputStream);
        while(true){
            try {
                String ss=din.readUTF();
                System.out.println(name+":"+ss);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

输出线程

package Net;

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

public class Out extends Thread{
    Socket socket;
    String name;
    public Out(Socket socket){
        this.socket=socket;
    }
    @Override
    public void run() {
        OutputStream out = null;
        try {
            out = socket.getOutputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        DataOutputStream dout = new DataOutputStream(out);
        Scanner scanner=new Scanner(System.in);
        while(true){
            String s= scanner.next();
            try {
                dout.writeUTF(s);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

测试

开启服务器端

开启客户端

开始聊天

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP实现服务器与单客户端连接(多线程) 的相关文章

  • Q老师度假【动态规划dp】【矩阵快速幂优化】

    问题描述 忙碌了一个学期的 Q老师 决定奖励自己 N 天假期 假期中不同的穿衣方式会有不同的快乐值 已知 Q老师 一共有 M 件衬衫 xff0c 且如果昨天穿的是衬衫 A xff0c 今天穿的是衬衫 B xff0c 则 Q老师 今天可以获得
  • 插值算法[数学建模]

    插值 插值算法一维数据插值方法分段线性插值分段二次插值 xff08 分段抛物插值 xff09 拉格朗日插值法龙格现象 牛顿插值法埃尔米特插值法分段三次埃尔米特插值PCHIP 样条插值三次样条插值 n维数据插值应用 插值算法 在工程和数学应用
  • 时间序列【数学建模】

    时间序列 确定性时间序列分析方法移动平均法简单移动平均法加权移动平均法趋势移动平均法 指数平滑法一次指数平滑法二次指数平滑法三次指数平滑法 差分指数平滑法一阶差分指数平滑法二阶差分指数平滑法 具有季节性特点的时间序列的预测 平稳时间序列模型
  • UITabBarController的简单使用和属性方法总结

    一 引言 与导航控制器相类似 xff0c 标签控制器也是用于管理视图控制器的一个UI控件 xff0c 在其内部封装了一个标签栏 xff0c 与导航不同的是 xff0c 导航的管理方式是纵向的 xff0c 采用push与pop切换控制器 xf
  • 多元分析——聚类分析【数学建模】

    聚类分析 Q型聚类分析样本的相似性度量类与类间的相似性度量聚类图最短距离法的聚类举例Matlab 聚类分析的相关命令pdistlinkageclusterzsore X H 61 dendrogram Z P T 61 clusterdat
  • 多元分析——主成分分析【数学建模】

    主成分分析的主要目的是希望用较少的变量去解释原来资料中的大部分变异 xff0c 将许多相关性较高的变量转化为彼此相互独立或不相关的变量 通常是选出的比原始变量个数少 xff0c 能解释大部份资料中的变异的几个新变量 xff0c 即所谓主成分
  • Pytorch Resnet101

    Pytorch Resnet101 模型使用模板 模型 span class token string 34 34 span 34 model span class token operator span span class token
  • t-SNE可视化

    t SNE的全称是t Distributed Stochastic Neighbor Embedding xff0c 是一种降低维度的技术 xff0c 适用于将高维度数据可视化 它将数据点之间的相似性转换为联合概率 xff0c 并试图最小化
  • ubuntu下为apt-get设置代理

    debian mint都可以按此设置 xff08 debian系均可 xff0c 直接基于debian或间接基于debian的 xff09 现在公司很多都是通过代理上网的 xff0c 通过代理上网apt get install无法通网络进行
  • 开源虚拟化集群管理平台ProxmoxVE-安装介绍以及PCI直通和嵌套虚拟化说明

    说明 xff1a 当前测试环境为PVE7 0版本 官网 xff1a Proxmox Powerful open source server solutions 目录 背景 安装系统 PCI直通配置 xff08 开启iommu xff09 允
  • qt Linux arm 交叉编译

    1 操作系统 ubuntu1 20 04 2 qt5 9 9 Index of archive qt 5 9 5 9 9 下载qt源码 qt everywhere opensource src 5 9 9 tar xz 和程序 qt ope
  • 三角函数:图像和性质关系

    紧接上一篇 xff1a http blog csdn net yinhun2012 article details 79377728 这次我们通过函数图文和unity程序来观察三角函数的图像 xff0c 首先从基本的来 xff1a 1 f
  • Linux 每天定时关机 设置

    sudo gedit etc crontab 输入密码后 xff0c 在该文件插入一行 50 02 root sbin shutdown h now 保存后 xff0c 系统会在每天02 50 自动关机
  • anaconda如何配置环境变量

    anaconda安装好后 xff0c 在cmd输入conda xff0c 显示 xff1a conda 不是内部或外部命令 xff0c 也不是可运行的程序 或批处理文件 原因是 xff1a anaconda没有配置环境变量 那接下来我就教大
  • Windows下用 Code blocks + mingw 搭建 Fortran 编译环境

    方法一 xff1a 下载页面 xff1a http www codeblocks org downloads binaries 下载 codeblocks 17 12mingw fortran setup exe 这样的版本 方法二 xff
  • 音频编码格式介绍-AAC

    目录 概述 帧格式 算法简介 开源的软件 AAC和MP3的关键性不同 参考阅读 1 概述 AAC xff08 Advanced Audio Coding xff09 xff0c 被认为是MP3的继任者 xff0c 相对MP3有更高的压缩效率
  • FFmpeg入门 - 视频播放

    音视频最好从能够直接看到东西 也更加贴近用户的播放开始学起 音视频编解码基础 我们可以通过http rtmp或者本地的视频文件去播放视频 这里的 34 视频 34 实际上指的是mp4 avi这种既有音频也有视频的文件格式 这样的视频文件可能
  • FFmpeg入门 - 格式转换

    1 音频分 plane 与打包 packed 解码出来的AVFrame 它的data字段放的是视频像素数据或者音频的PCM裸流数据 linesize字段放的是对齐后的画面行长度或者音频的分片长度 For video size in byte
  • ffmpeg播放器实现详解 - 音频播放

    1 生产者 消费者线程模型 本文主要讨论posix标准下的生产者 消费者线程模型 xff0c posix标准多用于类linux相关环境 POSIX The Portable Operating System Interface POSIX
  • 史上最全的WebRTC服务器技术选型分析

    1 前言 所以最常见的办法就是使用开源的实现 但是这里我也想给大家说一定 xff0c 用了开源的解决方案 xff0c 能快速的搭建起业务 xff0c 但是无疑也欠下了技术债 xff0c 因为开源的解决方案肯定没有自己实现的要熟悉 xff0c

随机推荐

  • C/C++音视频高级开发 FFmpeg编程入门

    1 播放器框架 1 1常用音视频术语 容器 xff0f 文件 xff08 Conainer File xff09 xff1a 即特定格式的多媒体文件 xff0c 比如mp4 flv mkv等 媒体流 xff08 Stream xff09 x
  • Virtualbox ArchLinux 安装

    Virtualbox ArchLinux 安装 准备工作 设置UEFI支持 网络设置 安装ArchLinux 开始安装 会以root身份进入一个虚拟控制台中 验证live环境是否正确 span class token function ls
  • conda启动、退出、切换环境时自动执行脚本(转载)

    在使用conda管理多种python环境时 xff0c 常常需要更改一些环境变量 比如conda的环境1依赖于cuda8 0 xff0c 而另一个环境2依赖cuda10 0 显然每次都手动更改是不可接受的 conda自V3 8版本之后就开始
  • ubuntu 安装多个CUDA版本并可以随时切换

    CUDA是什么就不介绍了 xff0c 直接讲怎么实现CUDA多版本的共存和实时切换 1 安装多个版本的CUDA 这里 xff0c 我们以cuda9 1版本和cuda9 0版本为例 xff08 先安装哪个无所谓 xff09 首先 xff0c
  • Copilot使用教程:让AI助手提升你的编程效率

    OpenAI推出的Copilot是一个基于GPT 4的代码生成器 xff0c 它可以帮助你在编写代码时给出智能建议 xff0c 从而提高你的编程效率 文章目录 什么是CopilotCopilot的安装与配置Copilot的基本功能Copil
  • Ubuntu16.04下anaconda3安装;Anaconda基本命令使用;装anaconda后终端有base解决方法

    1 安装 进入Anaconda https www anaconda com distribution 下载完成后 xff0c 有一个Anaconda3 2019 07 Linux x86 64 sh这样的文件 安装 bash Anacon
  • UITableViewCell高度自适应

    第一步 xff1a 设置UITableViewCell的高度自适应属性 xff0c table estimatedRowHeight 61 260 0f table rowHeight 61 UITableViewAutomaticDime
  • boost编译

    使用b2 help可以查看详细帮助信息 常用 xff1a b2 stage stagedir 61 lt xxx gt build type 61 complete minimal build dir 61 lt xxx gt with l
  • ubuntu linux 下载安装anaconda+配置环境变量

    下载安装anaconda 1 去官网下载anaconda xff08 Anaconda Anaconda DistributionAnaconda Anaconda DistributionAnaconda Anaconda Distrib
  • 如何打开Cookies网页

    cookies xff0c 是小型文本文件 xff0c 用于某些网站辨别用户身份追踪存储在用户本地终端上的数据 xff0c 有用户客户端暂时或永久保存 xff0c 这些文件给用户带来了方便 xff0c 不用烦于记住用户名和密码 xff0c
  • C/C++产生随机数

    C C 43 43 中产生随机数要用到的是rand 函数 xff0c srand 函数 1 如果你只要产生随机数而不需要设定范围的话 xff0c 你只要用rand 就可以了 xff1a rand 会返回一随机数值 范围在0至RAND MAX
  • 【angular】Can't bind to 'ngModel' since it isn't a known property of 'select'.

    最近做前端的时候 xff0c 经常会遇到Can 39 t bind to 39 39 since it isn 39 t a known property of 39 39 比如今天想在 lt select gt 上加一个双向绑定 xff0
  • 如何将旧电脑的数据传输到新电脑?

    小编最近换了台新电脑 xff0c 需要将旧电脑的文件都转移过去 xff0c 但是旧电脑上大文件不少 xff0c 不管是上传到网盘再下载 xff0c 还是通过QQ或微信在线传输 xff0c 速度都很慢 xff0c 且步骤太复杂 相信很多小伙伴
  • 如何恢复mac删除的文件夹?

    不小心删除了Macbook Pro上的整个系列文件夹 xff0c 将文件夹拖到垃圾箱文件夹然后清空它 xff0c 该文件夹上有许多珍贵的家庭视频和图片 有没有什么办法可以恢复该文件夹呢 xff1f 如果使用Time Machine备份了文件
  • macbook文件误删怎么恢复

    因为外形美观 xff0c 质地轻薄 xff0c 性能优越等原因 xff0c MacBook被很多用户用作工作笔记本 xff0c 方便随身携带办公 用户的MacBook一般都存储了大量的重要数据 xff0c 如果数据丢失肯定会给用户带来很大的
  • IOS开发基础篇--CAShapeLayer的strokeStart和strokeEnd属性

    一 案例演示 最近有一个小需求 xff0c 就是要做一个圆形进度条 xff0c 大概样子如下 xff1a 在不知道有CAShapeLayer的strokeStart和strokeEnd属性的时候 xff0c 我采取的方法就是实时的 移除旧的
  • 求n个数的最大值、最小值、平均值 (15 分)

    从键盘输入n xff08 3 lt 61 n lt 61 20 xff09 个整数 xff0c 求出这n个数的最大值 最小值 平均值 xff08 平均值保留2位小数 xff09 输入格式 在第一行输入一个介于3至20之间的整数n xff0c
  • Pandas数据处理/drop_duplicates()/映射map()/replace()/rename()/分箱/过滤异常值/随机抽样take()/random.permutation()

    1 删除重复元素 使用duplicated 函数检测重复的行 xff0c 返回元素为布尔类型的Series对象 xff0c 每个元素对应一行 xff0c 如果该行不是第一次出现 xff0c 则元素为True import numpy as
  • libjpeg的移植

    libjpeg是什么东西 xff1f libjpeg是一个开源源码包 xff0c 功能是图片格式之间的相互转换 compress decompress 移植步骤 xff1a xff11 解压源码 不要解压到共享目录中去 xff0c 共享文件
  • TCP实现服务器与单客户端连接(多线程)

    局域网内实现单客户端与服务器通信 客户端通过配置ip和端口号来连接服务器 客户端和服务器端各自具有发送和接收线程 可以实现一方持续发送 服务器端 package Net import java io IOException import j