TCP通信实现聊天

基于Java TCP实现高性能网络通信聊天室 本文详细介绍了如何使用Java TCP实现一个功能完整的网络聊天室。我们从基础的Socket编程开始,逐步深入到多线程处理、NIO非阻塞IO、协议设计、图形界面等高级主题,并探讨了性能优化和安全增强的方法。通过这个项目,我们不仅学习了网络编程的核心概念,还实践了多线程编程、IO处理、协议设计、用户界面开发等多个方面的技能。这些知识对于构建任何类型的网络应用程序都是非常有价值的。支持WebSocket协议以实现浏览器客户端添加文件传输和多媒体消息支持实现聊天室频道和私人消息功能。 阅读详情

一、TCP通信的客户端

1、简介

TCP通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器回写的数据

    表示客户端的类:
        java.net.Socket:此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。
        套接字:包含了IP地址和端口号的网络单位

    构造方法:
        Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。
        参数:
            String host:服务器主机的名称/服务器的IP地址
            int port:服务器的端口号

    成员方法:
        OutputStream getOutputStream() 返回此套接字的输出流。
        InputStream getInputStream() 返回此套接字的输入流。
        void close() 关闭此套接字。

2、实现步骤

1.创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号

2.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象

3.使用网络字节输出流OutputStream对象中的方法write,给服务器发送数据

4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象

5.使用网络字节输入流InputStream对象中的方法read,读取服务器回写的数据

6.释放资源(Socket)

3、注意

1.客户端和服务器端进行交互,必须使用Socket中提供的网络流,不能使用自己创建的流对象

2.当我们创建客户端对象Socket的时候,就会去请求服务器和服务器经过3次握手建立连接通路,这时如果服务器没有启动,那么就会抛出异常ConnectException: Connection refused: connect,如果服务器已经启动,那么就可以进行交互了

4、代码

//TCP通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器回写的数据
public class Demo02 {
    public static void main(String[] args) throws IOException {
        //1.创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号
        Socket socket = new Socket("127.0.0.1",8888);
        //2.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
        OutputStream os = socket.getOutputStream();
        //3.使用网络字节输出流OutputStream对象中的方法write,给服务器发送数据
        os.write("你好,服务器".getBytes());
        //4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
        InputStream is = socket.getInputStream();
        //5.使用网络字节输入流InputStream对象中的方法read,读取服务器回写的数据
        byte[] bytes = new byte[1024];
        int len = is.read(bytes);
        System.out.println(new String(bytes,0,len));
        //6.释放资源(Socket)
        socket.close();
    }
}

二、TCP通信的服务器端

1、简介

TCP通信的服务器端:接收客户端的请求,读取客户端发送的数据,给客户端回写数据

表示服务器的类:
    java.net.ServerSocket:此类实现服务器套接字。

构造方法:
    ServerSocket(int port) 创建绑定到特定端口的服务器套接字。

服务器端必须明确一件事情,必须的知道是哪个客户端请求的服务器
所以可以使用accept方法获取到请求的客户端对象Socket
成员方法:
    Socket accept() 侦听并接受到此套接字的连接。

2、 服务器的实现步骤:

    1.创建服务器ServerSocket对象和系统要指定的端口号
    
    2.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket
    
    3.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
    
    4.使用网络字节输入流InputStream对象中的方法read,读取客户端发送的数据
    
    5.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
    
    6.使用网络字节输出流OutputStream对象中的方法write,给客户端回写数据
    
    7.释放资源(Socket,ServerSocket)

3、代码

public class Demo01 {
    public static void main(String[] args) throws IOException {
        //1.创建服务器ServerSocket对象和系统要指定的端口号
        ServerSocket server = new ServerSocket(8888);
        //2.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket
        Socket socket = server.accept();
        //3.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
        InputStream is = socket.getInputStream();
        //4.使用网络字节输入流InputStream对象中的方法read,读取客户端发送的数据
        byte[] bytes = new byte[1024];
        int len = is.read(bytes);
        System.out.println(new String(bytes,0,len));
        //5.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
        OutputStream os = socket.getOutputStream();
        //6.使用网络字节输出流OutputStream对象中的方法write,给客户端回写数据
        os.write("收到谢谢".getBytes());
        //7.释放资源(Socket,ServerSocket)
        socket.close();
        server.close();
    }
}
C#实现TCP协议聊天程序的完整网络通信项目 System.Net.Sockets 命名空间中包含了多个核心类,它们是构建网络通信的基础。其中,SocketTcpClient和是最常用的三个类,各自适用于不同的场景。Socket提供最底层控制,适用于复杂网络编程。TcpClient和提供简化接口,适用于快速开发。通过本章的学习,我们掌握了Socket编程中客户端与服务端的连接机制、生命周期管理、异常检测以及基础连接测试的方法。下一章将深入讲解如何使用BindListen和Accept。 阅读详情

相关推荐

TCP协议客户服务器方式网络通信对话C++

计算机网络作业,C++编写的,类似于QQ那种但没有那么高级,有客户机服务器,debug运行

TCP协议

TCP通信的客户端代码实现 TCP通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器回写的数据 表示客户端的类: java.net.Socket:此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。 套接字:包含了IP地址和端口号的网络单位 构造方法: Socket(String host, int port) 创建一个流套接...

Valentino112358的博客 305

大一Python之循环解决实际问题

pythin之循环解决实际问题

weixin_66263546的博客 2287

计算机网络:TCP实现聊天功能

计算机网络:使用TCP实现聊天功能

qq_51447436的博客 1万+

F280049C Buffered Digital-to-Analog Converter (DAC)

使用DAC模块很简单,只需要配置参考电压,并写入DACVALS寄存器一个数字值即可。参考电压可配置为外部参考VDAC和内部参考电压1.65V和2.5V,并结合增益作为DAC模块最终的参考电压DACREF。举个例子,配置参考电压为内部参考电压1.65V,增益设置为2,则参考电压DACREF=3.3V,若向DACVALS写入数字值2048,则输出的DAC模块的输出带电压DACOUT=DACVALS×DACREF4096=1.65VDACOUT=

xht2403267701的博客 2369

openeuler在线/离线安装docker服务

openeuler在线/离线安装docker服务

haixuti7的博客 1071

通过TCP实现客户端与服务端之间通信

客户端发送的消息,服务端接收并在终端中显示出来。

m0_50027156的博客 2223

从DeepMimic到虚拟偶像:用动作捕捉数据训练AI跳舞的完整流程(附Blender插件配置)

本文详细介绍了如何利用DeepMimic的深度强化学习框架,将动作捕捉数据转化为虚拟偶像或游戏角色的舞蹈动作。从核心的模仿学习理念、PyBullet环境搭建、策略网络与奖励函数设计,到数据处理、训练技巧(如参考状态初始化),最后讲解了如何将训练好的AI模型集成到Blender和Unity等工具中,实现从数据到实时驱动角色的完整流程。

weixin_29054399的博客 504

TCP实现服务器和客户端通信

TCP (Transmission Control Protocol) 是一种面向连接的协议,用于在计算机网络中传输数据。TCP 可以确保数据的可靠传输,即使在网络环境不稳定的情况下也能够保证数据的完整性和顺序。面向连接:在 TCP 通信中,通信的双方必须先建立一个连接,然后才能进行数据的传输。连接的建立需要经过三次握手过程,确保双方都能够进行通信。可靠传输:TCP 可以保证数据的可靠传输,它使用确认和重传机制来确保数据的完整性和顺序。

southernbrid的博客 6045

从USB 2.0到USB 3.x:Synopsys SVT USB VIP配置避坑与接口选择指南

本文详细解析了从USB 2.0到USB 3.x的Synopsys SVT USB VIP配置要点,涵盖协议版本选择、物理接口匹配及UVM层次化架构实现。重点介绍了layering sequence的配置技巧和常见问题解决方案,帮助验证工程师高效避坑并优化验证流程。

weixin_42653691的博客 238

十二、基于FPGA实现slave SelectMAP配置逻辑

slave SelectMAP配置

weixin_41838250的博客 8755

网络编程——TCP

通过TCP协议传输信息 客户端 获取服务器IP及端口号 连接服务器:实例化一个Socket 发送消息:调用Socket.getOutputStream() 关闭资源 public class TcpClientDemo { public static void main(String[] args) throws UnknownHostException { //1.获取服务器IP及端口 InetAddress inetAddress = InetA

Yellow_Star的博客 436

SystemVerilog从入门到实战

SystemVerilog复合数据类型概述 SystemVerilog增强了Verilog的数据建模能力,提供多种复合数据类型: 数组类型:包括定宽数组(固定大小)、动态数组(运行时分配)和多维数组,支持高效索引访问。 队列:结合数组和链表特性,支持两端快速插入/删除操作,提供push/pop等方法。 关联数组:键值对存储结构,支持稀疏数据存储和快速查找,提供exists/delete等方法。 结构体:组合不同类型数据成员,支持打包(packed)形式以优化存储空间。 枚举类型:为数值赋予语义名称,支持状态

2301_79143213的博客 1227

c#窗体实现 Socket的TCP通信 聊天室案例

一.Socket(套接字)通信概念   套接字(socket)是通信的基石,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。   应用层通过传输层进...

qq_43552118的博客 3587

整车的智能配电系统

本文探讨了汽车电网安全的重要性,分析了传统汽车电网的现状,并重点介绍了半导体在汽车智能配电系统中的作用。半导体凭借其单向导电性和可控性,如二极管、MOSFET等,提供了更高效、安全的电力控制。通过对比传统保险丝与半导体器件,阐述了半导体在过流保护、电压监测和故障诊断方面的优势,强调其在减少安全隐患、提高能源管理和续航里程方面的贡献。极氪智能配电系统展示了如何运用半导体技术实现整车能源的精细化管理,降低维修成本,减少线束复杂性,提升安全性能。

让你爱上电路设计 1612

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Code02,端口Port,通信协议,TCP实现聊天

端口Port 通信协议 TCP实现聊天 客户端 服务端

qq_50034199的博客 901

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Qt实现TCP通信(QQ聊天,带源码)

一、客户端 客户端使用Qt中的QTCPSocket类与服务器进行通信可分为5个步骤: ①创建QTcpSocket套接字对象 socket = new QTcpSocket(); ②使用这个对象连接服务器 socket->connectToHost(IP, port); ③使用write函数向服务器发送数据 socket.write(data); ④当socket接收缓冲区有新数据到来时,会发...

華仔的博客 3184

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java网络编程实现TCP-CS通信 UDP聊天

Java网络编程实现TCP-C/S通信 UDP聊天 1.TCP客户端与服务器实现通信 先启动服务器端,再启动客户端 //服务器端 public static void main(String[] args) throws IOException { ServerSocket serverSocket=null; Socket socket=null; InputStreamReader inputStreamReader=null; //启动服

weixin_32629733的博客 380

【C#】WCF和TCP消息通信练习,实现聊天功能

代码】【C#】WCF和TCP消息通信练习,实现聊天功能。

qq_46556714的博客 1703

java学习:Socket通信实现简易网络聊天室——基于TCP协议

文章目录Socket通信实现简易网络聊天室——基于TCP协议功能展示代码展示服务器端代码 Socket通信实现简易网络聊天室——基于TCP协议 Socket协议是基于TCP协议的面向连接的网络通信方式。具有安全可靠、效率相对较低的特点。 功能展示 (1)模拟三个人(AAA、BBB、CCC)在聊天室对话,分别进入聊天室。 (2)有人进入聊天室时,聊天室中的人可以收到系统信息。 (3)某人发送的消息,...

weixin_42924812的博客 1194

TCP通信的实现-优化点对点聊天

点对点聊天优化

m0_73944607的博客 136

Ubuntu下C语言实现TCP通信聊天室功能

Ubuntu下C语言实现TCP通信聊天室功能 去发现同类优质开源项目:https://gitcode.com/ 简介 本项目是一个在Ubuntu环境下使用C语言实现的基于TCP通信的聊天室程序。该程序采用了经典的Client/Server架构,支持用户注册、登录、查看在线用户、发送私密消息、群发消息以及退出保存会话数据等功能。 特性 Client/Server架构:确保了客户端和服务器端的合理分...

gitblog_06787的博客 494

编写myqq即时聊天脚本,实现相互通信(tcp协议)

  编写myqq即时聊天脚本,实现相互通信 主要涉及socket通信,tcp协议 与udp相比,tcp有一些不同。对比见程序中的注释。 udp链接 https://mp.youkuaiyun.com/postedit/83316495 注意:执行时要先运行server端,这也是跟udp的不同之一。   # TCP-Server import socket  # 1. 创建 socket 对...

w_zhanglu的博客 790

linux的qt的tcp通信,QT实现简单的tcp通信聊天工具

QT实现简单的tcp通信聊天工具目录结构: pro文件中添加: 1. tcp_server :1.1 服务器端头文件/******app.h ******/#ifndef APP_H#define APP_H#include #include //*#include //*#include //*QT_BEGIN_NAMESPACEnamespace Ui { class app; }QT_END...

weixin_35418139的博客 1073

Go语言TCP通信实现同时多句聊天

TCP协议为传输控制协议

Mr_Lu_Gu的博客 264

python tcp通信如何实现多人聊天_Python Socket TCP双端聊天功能实现过程详解

SOCKET编程socket(套接字):是一个网络通信的端点,能实现不同主机的进程通信, -通过IP+端口定位对方并发送消息的通信机制分为UDP和TCP客户端Client: 发起访问的一-方服务器端Server: 接受访问的一方UDP编程Server端流程1.建立socket,socket是负贵具体通信的一个实例2.绑定,为创建的socket指派固定的端口和ip地址3.接受对方发送内容4.给对方发...

weixin_39620273的博客 538
上一篇: Java缓存流
下一篇: Java网络编程实现文件上传
不吃辣的IT男
博客等级 码龄7年 6560粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

不吃辣的IT男

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

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

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

打赏作者

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

抵扣说明:

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

余额充值