首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java网络编程—TCP实现两个用户互相发送消息

Java网络编程—TCP实现两个用户互相发送消息

作者头像
SakuraTears
发布于 2022-01-13 06:50:49
发布于 2022-01-13 06:50:49
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

由于TCP需要两个用户之间建立连接才可以发送消息所以如果像UDP那样直接开启两个线程一个发送一个接受的话,用户一就会因为发送端开启但是连接不到接收端而无法发送。 所以就要在发送端加一个条件,当socket连接上接收端都才能进行下面的操作。

TCP实现:

Client端: 此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。 1:创建客户端的套接字Socket 2:获取输出流 3:输出流写数据 4:关闭套接字

Server端 此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。 1:创建服务器的套接字ServerSocket 2:监听客户端的套接字 3:获取输入流读取内容 4:关闭套接字

发送端:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package net.tcp;

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;

public class Send implements Runnable {
    private String address;
    private int port;
    private String send;
    private Socket socket;

    public Send(String address, int port) throws IOException {
        this.address = address;
        this.port = port;
        socket = null;
    }

    @Override
    public void run() {
        try {
            while (socket == null) {
                socket = new Socket(address, port);
                Thread.sleep(1000);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        while (true) {
            try {
                DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
                send = new Scanner(System.in).nextLine();
                if (send != null) {
                    dataOutputStream.writeUTF(send);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

接收端:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package net.tcp;

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

public class Server implements Runnable {
    private int port;
    private ServerSocket serverSocket;
    private Socket socket;
    private DataInputStream dataInputStream;

    public Server(int port) throws IOException {
        this.port = port;
        serverSocket = new ServerSocket(port);
    }

    @Override
    public void run() {
        try {
            socket = serverSocket.accept();
            System.out.println("连接成功");
            dataInputStream = new DataInputStream(socket.getInputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
        while (true) {
            try {
                String receiver = dataInputStream.readUTF();
                System.out.println(receiver);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

用户一

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package net.tcp;

import java.io.IOException;

public class Test_1 {
    public static void main(String[] args) throws IOException {
        Send send = new Send("127.0.0.1", 8888);
        Server server = new Server(8989);
        new Thread(server).start();
        new Thread(send).start();
    }
}

用户二

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package net.tcp;

import java.io.IOException;

public class Test_2 {
    public static void main(String[] args) throws IOException {
        Send send = new Send("127.0.0.1", 8989);
        Server server = new Server(8888);
        new Thread(server).start();
        new Thread(send).start();
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年04月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java网络编程实战案例
掌握这些实战案例,你已经具备了开发企业级网络应用的基础能力!下一步建议学习 Netty 框架,它将帮助你构建高性能、高可靠的网络应用程序。
艾伦耶格尔
2025/08/12
1200
Java网络编程实战案例
Java—网络编程
1)IP地址:唯一标识网络上的每一台计算机,两台计算机之间通信的必备要素。 2)端口号:计算机中应用的标号(代表一个应用程序),0-1024系统使用或保留端口,端口号占2个字节,所以有效端口0-65535. 3)通信协议:通信的规则TCP,UDP 4)注意:在通信协议相同的情况下,端口号才是唯一的。
全栈程序员站长
2022/09/08
2.4K0
Java—网络编程
大数据必学Java基础(八十一):基于TCP的网络编程
​基于TCP的网络编程功能:模拟网站的登录,客户端录入账号密码,然后服务器端进行验证。一、功能分解1:单向通信功能:客户端发送一句话到服务器客户端:public class TestClient {//客户端 //这是一个main方法,是程序的入口: public static void main(String[] args) throws IOException { //1.创建套接字:指定服务器的ip和端口号: Socket s = new Socket("192
Lansonli
2022/11/10
4180
大数据必学Java基础(八十一):基于TCP的网络编程
Java---网络编程(3)-TCP-互传文件和图片
建立连接,形成传输数据的通道。 在连接中进行大数据量传输 通过三次握手完成连接,是可靠协议 必须建立连接,效率会稍低
谙忆
2021/01/21
1K0
Java---网络编程(3)-TCP-互传文件和图片
Java--Socket通信(双向)
该文介绍了如何利用Java实现基于TCP的客户端和服务器端通信。客户端和服务器端通过TCP进行通信,服务器端监听端口,客户端通过Socket连接到服务器端进行通信。具体实现包括创建Server和Client类,以及实现线程安全的ServerSocket类。客户端和服务器端的通信通过UTF-8编码。
I Teach You 我教你
2018/01/02
2.2K0
JAVA网络编程
一、osi网络7层架构 ip:网络唯一标识。(internet protocol address)网络互联协议地址。分为网络地址和主机地址。 port:端口号,每一个网络应用程序都需要一个以上的端口号。(1-65535)。1000以内的不要用。 osi7层架构
张哥编程
2024/12/13
1770
网络编程笔记
先运行Demo2_Receive,再运行Demo2_Send,运行Demo2_Send发送消息能在另一个创建口接收到。
砖业洋__
2023/05/06
2850
网络编程笔记
java-网络编程
这个类主要用来表示IP地址,有两个子类:Inet4Address和Inet6Address
luxuantao
2021/02/24
3680
JAVA网络编程知识学习
两种架构各有优势,但是无论哪种架构,都离不开网络的支持。网络编程,就是在一定的协议下,实现两台计算机的通信的程序。
大忽悠爱学习
2022/05/06
7140
JAVA网络编程知识学习
TCP粘包问题与解决方案详解及Java代码演示
TCP(Transmission Control Protocol)是一种可靠的、面向连接的传输层协议,用于在网络上可靠地传输数据。然而,在实际应用中,TCP协议可能会遇到粘包问题,这是由于TCP协议特性导致的,而不是协议本身的缺陷。本文将详细讲解TCP粘包问题的原因、常见解决方案,并通过Java代码演示一种解决方案。
GeekLiHua
2025/01/21
2230
java---网络编程
socket(套接字) , 各种开发语言提供出来专门用于网络编程的API(接口),在传输层上的协议进行的编程tcp udp , 通过端口号来进行通信,实现点对点之间的通信 (服务端的Socket , 客户端的Socket)
用户10787181
2023/10/17
3170
java---网络编程
10 - JavaSE之网络编程
为什么要分层呢?因为整个网络协议非常复杂,要涉及到方方面面的知识,而且还有对底层硬件的操作,利用分层的思想,我们可以将复杂的通信协议分割成一层层的形式,上一层可以调用下一层,而与再下一层不发生关系,各层之间互不影响,便于系统的开发。我们把用户程序作为最高层,把物理通信线路作为最底层,高层到底层一步步封装,我们不需要直接操作底层,而是操作最简单的最高层,这就是分层的意义。
Daotin
2018/08/31
4160
10 - JavaSE之网络编程
Java网络编程
通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信。这就好比在道路中行驶的汽车一定要遵守交通规则一样,协议中对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守,最终完成数据交换。
訾博ZiBo
2025/01/06
1790
Java网络编程
JAVA网络编程
通过计算机网络可以使多台计算机实现连接,位于同一个网络的计算机 想要通信就要遵守一定的协议和规则,这就好比道路中行驶的汽车要遵守 交通规则一样,在计算机网络中这些连接和通信的规则称为网络通信协议 他对数据的传输格式,传输速率,传输步骤等做了统一规定,通信双方必须 同时遵守才能完成数据交换。
姜同学
2022/10/27
6410
Socket编程
Java中的java.net包提供了网络通信的各种实现,如果我们要使两台计算机间通过网络来交换数据,那么中间就需要有连接才可进行,而net包中Socket对象就担任连接这个的角色,net包提供了两种常见的网络协议支持:
晚上没宵夜
2020/10/28
1K0
【Java_21】TCP、UDP
一、网络编程 1. 软件架构 ① B/S * Brower / Server ---> 浏览器 / 服务器 例如:淘宝网 ② C/S * Client / Server ---> 客户端 / 服务端 例如:QQ 2. 网络通信 ① 七层模型 * 数据链路层 ---> 物理层 ---> 网络层 ---> 传输层 ---> 会话层 ---> 表现层 ---> 应用层 ② 网络通信三要素 * 通信协议(TCP、UDP):去教室的方式 * i
用户8250147
2021/02/04
5920
Java网络编程:TCP的socket编程
协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构、交换方式、包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP协议族有IP协议、TCP协议和UDP协议。现在TCP/IP协议族中的主要socket类型为流套接字(使用TCP协议)和数据报套接字(使用UDP协议)。
全栈程序员站长
2022/09/08
7670
Java网络编程—UDP实现两个用户互相发送消息
UDP不需要实现两个用户连接就可以发送消息,所以直接开两个线程,一个发送,一个接受就可以实现。
SakuraTears
2022/01/13
8820
Java小项目——在线聊天室
PS:该练习可实现类似在线聊天系统的小功能,本人的第一个的练习,还有很多不足之处,请各位大佬指教。
Echo_Wish
2023/11/30
4230
JAVA网络编程TCP通信
Socket称为“套接字”,描述IP地址和端口。在Internet上的主机一般运行多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定在一个端口上,不同的端口对应于不同的服务。Socket和ServerSocket类位于java.net包中。ServerSocket用于服务端,Socket是建立网络连接时使用的。连接成功时,应用程序两端都会产生一个Socket实例,通过操作这个实例完成所需会话。
HUC思梦
2020/09/03
9780
JAVA网络编程TCP通信
相关推荐
Java网络编程实战案例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档